不明确的列名...但有时只是?

时间:2017-02-09 11:59:44

标签: sql sql-server

显然,这有不明确的列名'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

1 个答案:

答案 0 :(得分:1)

问题很可能是LocationID表中名为Plants的列,这就是为什么查询与LocationID要返回的Plants列混淆的原因或来自@temptable

正如@GordonLinoff所提到的,它是一种很好的做法(我说最佳做法),它总是为连接或相关查询中使用的表设置别名,并且也为它们的关联列执行此操作。

这种情况只会发生" 有时候 "是因为在您的第二个查询中,只有一个IncotermsID存在于CROSS APPLY中使用的两个表中。