这是一个存储过程,用于选择葡萄酒的完整详细信息。它将存储位置ID作为参数。
这是正确的构建,在结构上类似于我写的许多sp的工作,但是它不返回数据。我是不是漏掉了什么?
CREATE PROCEDURE [sp_retrieveInventory_Full]
(
@StorageLocationID [int]
)
AS
BEGIN
SELECT [WineName],
[RackID],
[RackColumn],
[RackRow],
[WineTypeID],
[WineVarietyID],
[VintnerName],
[dbo].[Vintner].[Country],
[dbo].[Vintner].[StateProvince],
[dbo].[Vintner].[Region],
[VendorName],
[Vintage],
[PurchaseDate],
[PurchasePrice],
[BottleSizeID],
[ABV],
[DrinkByDate],
[FoodType],
[TastingNotes],
[RatedBy],
[RatingScore]
FROM [dbo].[StorageLocation]
INNER JOIN [dbo].[Wine]
ON [dbo].[StorageLocation].[WineID] = [dbo].[Wine].[WineID]
INNER JOIN [dbo].[Vintner]
ON [dbo].[Vintner].[VintnerID] = [dbo].[Wine].[VintnerID]
INNER JOIN [dbo].[Vendor]
ON [dbo].[Vendor].[VendorID] = [dbo].[Wine].[VendorID]
INNER JOIN [dbo].[Pairing]
ON [dbo].[Pairing].[PairingID] = [dbo].[Wine].[PairingID]
INNER JOIN [dbo].[Rating]
ON [dbo].[Rating].[RatingID] = [dbo].[Wine].[RatingID]
WHERE [dbo].[StorageLocation].[StorageLocationID] = @storageLocationID
END
GO发布于 2019-10-31 15:00:24
当查询重新运行无结果时,这是因为不存在满足where子句中条件的记录,或者,如果查询包含内部联接,则至少有一个joins on条件不返回任何记录。
要找出哪个连接搞乱了查询,最简单的方法是开始逐个删除连接,但要这样做,您必须首先更改select子句。
我喜欢这样做:从除了最后一个连接之外的所有连接开始-看看它是否返回任何记录:
SELECT 1
FROM [dbo].[StorageLocation]
INNER JOIN [dbo].[Wine]
ON [dbo].[StorageLocation].[WineID] = [dbo].[Wine].[WineID]
INNER JOIN [dbo].[Vintner]
ON [dbo].[Vintner].[VintnerID] = [dbo].[Wine].[VintnerID]
INNER JOIN [dbo].[Vendor]
ON [dbo].[Vendor].[VendorID] = [dbo].[Wine].[VendorID]
INNER JOIN [dbo].[Pairing]
ON [dbo].[Pairing].[PairingID] = [dbo].[Wine].[PairingID]
-- INNER JOIN [dbo].[Rating]
-- ON [dbo].[Rating].[RatingID] = [dbo].[Wine].[RatingID]
WHERE [dbo].[StorageLocation].[StorageLocationID] = @storageLocationID如果不是,则注释掉下一个联接,然后再次运行查询。冲洗,然后重复。
但是,请注意,可能有多个内部联接阻止查询返回记录。
https://stackoverflow.com/questions/58638153
复制相似问题