问题描述
|
*更新*
抱歉!我有点忙,很忙,所以没有适当地解决这个问题。
本质上,这三个队列都与用户详细信息有关。我正在为新客户端更新站点,但该站点受当前数据库结构的限制。因此,我的目标是尝试将所有这些信息放在一个数据库调用中,而不是在3个单独的数据库中,因为这似乎是两者中最有效的方式。
我希望有人比我更聪明,知道一些忍者的动作可以一口气找回。在发布之前,我本该花更多时间自己尝试一下。
谢谢你的时间。
常见值为@dealerId-这是一个int值。
谢谢
SELECT TOP(100) PERCENT dbo.ReferenceItems.Title
FROM dbo.AdvertiserLanguageLink
INNER JOIN dbo.ReferenceItems
ON dbo.AdvertiserLanguageLink.LanguageId = dbo.ReferenceItems.Id
WHERE (dbo.AdvertiserLanguageLink.AdvertiserId = @dealerId)
ORDER BY dbo.ReferenceItems.Title
SELECT TOP (100) PERCENT dbo.AircraftTypes.AircraftTypeDescription,dbo.AircraftTypes.AircraftTypeId
FROM dbo.AdvertiserAircraftTypeLink
INNER JOIN dbo.AircraftTypes
ON dbo.AdvertiserAircraftTypeLink.AircraftTypeId = dbo.AircraftTypes.AircraftTypeId
WHERE (dbo.AdvertiserAircraftTypeLink.AdvertiserId = @dealerId)
ORDER BY dbo.AircraftTypes.SortSequence
SELECT TOP (1) dbo.Addresses.Country,dbo.Addresses.Telephone1
FROM dbo.AdvertiserAddressLink
INNER JOIN dbo.Addresses
ON dbo.AdvertiserAddressLink.AddressId = dbo.Addresses.Id
WHERE (dbo.AdvertiserAddressLink.AdvertiserId = @dealerId)
AND (dbo.Addresses.AddressType = 1 OR dbo.Addresses.AddressType = 0)
ORDER BY dbo.Addresses.Sequence
解决方法
您不能/不应该将它们组合在一起。
您正在从所有3个表中选择完全不同的数据,看来它们是完全无关的。您希望“组合”结果集看起来如何?您要结合书籍,飞机和电话信息吗?
您的目标到底是什么?如果您告诉我们,我们也许可以给您一条不同的(正确的)路径。
,我只是在这里推论,但你要么...
1.只想使代码更简洁。
2.希望输出具有一致的签名(相同的字段等)。
如果是
1.
,我将保持原样。每个查询都是不同的,并且使用IF语句将它们分隔开使它可读且显而易见,存在三个执行路径。
在自动执行部分程序员工作的数据绑定框架的情况下,通常需要后者。如果是这种情况,我仍然将代码保留在IF语句中。如果您随后将每个字段明确地转换为相同的类型(例如INT或VARCHAR(256)等),然后确保每次都使用相同的字段名称(例如ID或Name等),那么您将每个执行路径都将获得相同的签名。
编辑:
对于您要实现的目标,更具体地说,您所面临的问题,我仍然不确定。
如果您只是想执行一个数据库调用,并获取三组数据,那么使用带有3个2语句的存储过程就可以做到这一点。然后,根据您访问数据库的方式,您应该能够完成这三个记录集的设置。
因此,我怀疑您面临的问题根本与SQL不相关,而与您的应用程序有关。您使用什么语言?您当前如何访问记录集? SP返回3个记录集时您将面临什么问题?等等...