IT

'WITH' 절을 사용하여 SQL Server 쿼리에 이상한 오류가 발생함

itgroup 2023. 7. 7. 18:56
반응형

'WITH' 절을 사용하여 SQL Server 쿼리에 이상한 오류가 발생함

다음 쿼리:

WITH 
    CteProductLookup(ProductId, oid) 
    AS 
    (
        SELECT p.ProductID, p.oid
        FROM [dbo].[ME_CatalogProducts] p 
    )

SELECT 
    rel.Name as RelationshipName,
    pl.ProductId as FromProductId,
    pl2.ProductId as ToProductId
FROM 
    (
    [dbo].[ME_CatalogRelationships] rel 
    INNER JOIN CteProductLookup pl 
    ON pl.oid = rel.from_oid
    ) 
    INNER JOIN CteProductLookup pl2 
    ON pl2.oid = rel.to_oid
WHERE
    rel.Name = 'BundleItem' AND
    pl.ProductId = 'MX12345';

다음 오류가 발생하고 있습니다.

Msg 319, 레벨 15, 상태 1, 라인 5 키워드 'with' 근처의 구문이 잘못되었습니다.이 문이 공통 테이블 식, xml namespaces 절 또는 변경 추적 컨텍스트 절인 경우 이전 문은 세미콜론으로 종료되어야 합니다.

실행 시에만.관리 스튜디오의 sql 문에 오류/경고가 없습니다.

아이디어 있어요?

항상 다음과 같은 문장과 함께 사용합니다.;WITH그러면 이 오류가 발생하지 않을 것입니다.WITH 명령에는 다음이 필요했습니다.;이 명령과 이전 명령 사이에서 항상 사용합니다.;WITH당신은 이것을 하는 것을 절대 기억할 필요가 없을 것입니다.

공통 테이블 식을 만들고 사용하기 위한 지침 섹션에서 공통 테이블 식을 사용하여(Transact-SQL)참조하십시오.

배치의 일부인 문에 CTE를 사용하는 경우 앞의 문 뒤에 세미콜론이 와야 합니다.

;WITH 
    CteProductLookup(ProductId, oid) 
    AS 
...

WITH 키워드 바로 앞에 세미콜론을 넣는 것이 합법적이어야 합니다.

경우에 따라 테이블 힌트가 있고 WITH 절과 힌트 사이에 공백이 있는 경우에도 이 문제가 발생합니다. 따라서 다음과 같이 입력하는 것이 좋습니다.

SELECT Column1 FROM Table1 t1 WITH(NOLOCK)
INNER JOIN Table2 t2 WITH(NOLOCK) ON t1.Column1 = t2.Column1

그리고 다음은 아닙니다.

SELECT Column1 FROM Table1 t1 WITH (NOLOCK)
INNER JOIN Table2 t2 WITH (NOLOCK) ON t1.Column1 = t2.Column1

언급URL : https://stackoverflow.com/questions/2746916/getting-an-odd-error-sql-server-query-using-with-clause

반응형