Sql 公共表表达式给定错误

Sql 公共表表达式给定错误,sql,common-table-expression,Sql,Common Table Expression,假设您指的是错误消息: 关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止 然后照它说的去做;使用分号终止上一个表达式 DECLARE @UDFLabel1 VARCHAR(50), @UDFLabel2 VARCHAR(50), @UDFLabel3 VARCHAR(50), @UDFLabel4 VARCHAR(50), @UDFLabel

假设您指的是错误消息:

关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止

然后照它说的去做;使用分号终止上一个表达式

DECLARE @UDFLabel1 VARCHAR(50),
        @UDFLabel2 VARCHAR(50),
        @UDFLabel3 VARCHAR(50),
        @UDFLabel4 VARCHAR(50),
        @UDFLabel5 VARCHAR(50)

SELECT @UDFLabel1 = UserDefinedFieldName01, 
       @UDFLabel2 = UserDefinedFieldName02,
       @UDFLabel3 = UserDefinedFieldName03,
       @UDFLabel4 = UserDefinedFieldName04,
       @UDFLabel5 = UserDefinedFieldName05
FROM DataSourceGroup AS DSG
JOIN DataSource AS DS
ON DS.DataSourceGroupID=DSG.DataSourceGroupID
WHERE DS.DataSourceID=@DataSourceID

WITH UDFLabel ( ID, Label ) 
AS ( SELECT 1, @UDFLabel1
     UNION 
     SELECT 2, @UDFLabel2
     UNION 
     SELECT 3, @UDFLabel3
     UNION 
     SELECT 4, @UDFLabel4
     UNION 
     SELECT 5, @UDFLabel5
) 
SELECT ID, Label
FROM UDFLabel
WHERE Label IS NOT NULL 
很重要,并且使其工作

不过,我想我应该在这个场景中使用一个表变量(或类似的变量)

[snip]
WHERE DS.DataSourceID=@DataSourceID
;

WITH UDFLabel ( ID, Label ) 
AS ( SELECT 1, @UDFLabel1
     UNION 
[snip]