我可以使用临时表使用STUFF FOR XML PATH吗?

时间:2014-11-17 15:49:53

标签: sql sql-server sql-server-2008

谁能告诉我为什么这不起作用?

DECLARE @InOuts TABLE
    (
        RowID int,
        RowText varchar(100)
    )

INSERT INTO @InOuts ( RowID, RowText ) VALUES
( 1, 'The' ), ( 1, 'Cat' ), ( 1, 'Sat' ), ( 1, 'here' ), ( 2, 'The' ), ( 3, 'Cat' )

SELECT * FROM @InOuts

SELECT  STUFF((    SELECT ',' + @InOuts.RowText

                        FROM @InOuts
                        WHERE
                       RowID = 1
                        FOR XML PATH('')
                        ), 1, 1, '' )

这会引发错误:

Msg 137,Level 16,State 1,Line 13

必须声明标量变量" @ InOuts"。

我在没有SELECT STUFF语句的情况下运行代码(即最多

SELECT * FROM @InOuts

并且工作正常 - 它按预期返回六行。

换句话说,我似乎无法在临时桌面上使用STUFF。如果我用我的数据库中的表替换@InOuts及其列,则脚本可以正常工作。

由于

爱德华

1 个答案:

答案 0 :(得分:3)

使用表名的别名:

SELECT STUFF((SELECT ',' + io.RowText
              FROM @InOuts io
              WHERE io.RowID = 1
              FOR XML PATH('')
             ), 1, 1, '' )

SQL Server不允许表(和列)别名以@开头。简单的解决方案是使用更简单的别名。