2017-02-09 1 views
-3

그래서 분명히이 모호한 열 이름이 'LocationID' I가 하단 라인을 변경하여 해결할 수모호한 열 이름 ... 가끔?

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 
+4

항상 테이블 별칭과 한정 열 이름을 사용하십시오. 특히 쿼리에 둘 이상의 테이블이있는 경우 특히 그렇습니다. 그렇다면이 오류에 대해 걱정할 필요가 없습니다. –

+1

식물에 대한 정의는 무엇입니까? –

+0

빙고, 식물에서 LocationID를 잊어 버렸습니다. 필요한 것. 더. 커피. – Eliska

답변

1

문제는 가능성이 가장 높은 쿼리가 혼란 이유입니다 Plants 표에 LocationID라는 이름의 칼럼입니다 반환 될 LocationID 열에 대한 설명은 Plants 또는 @temptable?

@ GordonLinoff에서 언급했듯이 조인 또는 상관 쿼리에 사용되는 테이블의 별칭을 지정하고 관련 열에 대해서도 마찬가지로 최선의 방법을 사용하는 것이 좋습니다. 두 번째 쿼리에서 단일 IncotermsIDCROSS APPLY에 사용 된 두 가지 중 하나만 테이블에 존재가 있기 때문에

이에만 발생하는 이유는 "때때로"입니다.