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

1 回答 1

2

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

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

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

[snip]
WHERE DS.DataSourceID=@DataSourceID
;

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

;很重要,并使其发挥作用。

不过,我想我会在这种情况下使用表变量(或类似变量)。

于 2009-11-14T11:44:53.967 回答