显然,这有不明确的列名'LocationID':
DECLARE @temptable table (LocationID int)
INSERT INTO @temptable SELECT LocationID FROM inserted;
INSERT INTO dbo.LocationsPlants (LocationID, PlantID)
(SELECT LocationID, PlantID FROM dbo.Plants CROSS JOIN @temptable)
我可以通过改变底线来解决这个问题:
(SELECT T.LocationID, PlantID FROM dbo.Plants CROSS JOIN @temptable AS T)
但另一个表上的这个相同查询没有不明确的列IncotermsID:
DECLARE @temptable table (IncotermsID int)
INSERT INTO @temptable SELECT IncotermsID FROM inserted;
INSERT INTO dbo.IncotermsPlants (IncotermsID, PlantID)
(SELECT IncotermsID,PlantID FROM dbo.Plants CROSS JOIN @temptable)
我很困惑。表结构:
dbo.Locations:
[LocationID] [int] NOT NULL,
[LocationTypeID] [int] NOT NULL,
[Title] [varchar](100) NULL
dbo.Incoterms:
[IncotermsID] [int] IDENTITY(1,1) NOT NULL,
[Incoterm] [varchar](20) NOT NULL
答案 0 :(得分:1)
问题很可能是LocationID
表中名为Plants
的列,这就是为什么查询与LocationID
要返回的Plants
列混淆的原因或来自@temptable
?
正如@GordonLinoff所提到的,它是一种很好的做法(我说最佳做法),它总是为连接或相关查询中使用的表设置别名,并且也为它们的关联列执行此操作。
这种情况只会发生" 有时候 "是因为在您的第二个查询中,只有一个IncotermsID
存在于CROSS APPLY
中使用的两个表中。