公用表表达式给出错误

时间:2009-11-14 11:35:44

标签: sql common-table-expression

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 

1 个答案:

答案 0 :(得分:2)

假设您的意思是错误消息:

  

关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句。

然后做它说的话;使用分号终止前一个表达式...

[snip]
WHERE DS.DataSourceID=@DataSourceID
;

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

;非常重要,并使其有效。

我认为我会在这个场景中使用表变量(或类似的)。