得到一个奇怪的错误,SQL Server查询使用`WITH`子句

Are*_*ren 44 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';
Run Code Online (Sandbox Code Playgroud)

是生成此错误:

消息319,级别15,状态1,行5关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号终止先前的语句.

仅在执行时.管理工作室的sql语句中没有错误/警告.

有任何想法吗?

KM.*_*KM. 91

总是使用语句就像;WITH那样你永远不会得到这个错误.WITH命令需要;在它和任何以前的命令之间,总是使用;WITH你永远不必记住这样做.

请参阅WITH common_table_expression(Transact-SQL),参见"创建和使用公用表表达式指南"一节:

如果在作为批处理一部分的语句中使用CTE,则其前面的语句必须后跟分号.


gbn*_*gbn 18

;WITH 
    CteProductLookup(ProductId, oid) 
    AS 
...
Run Code Online (Sandbox Code Playgroud)


gre*_*ama 5

将分号直接放在WITH关键字之前是合法的。