如何将动态SQL的结果存储到变量中

时间:2012-05-01 17:45:48

标签: sql sql-server-2008

有没有办法将exec语句的结果存储在varchar?

DECLARE @TableName varchar(100)
DECLARE @ExecStatement varchar(max)
DECLARE @PromotionXML varchar(max) 

SET @TableName = 'Feeds'

Set @ExecStatement = (
'
SET @PromotionXML = (
SELECT
    *
FROM
    ' + @TableName + ' for xml auto, elements 
    )'
)


exec @ExecStatement


select @PromotionXML

1 个答案:

答案 0 :(得分:6)

您需要使用sp_executesql,而不是EXEC,因为您需要将内部变量视为输出参数(您无法使用EXEC)。此外,所有这些参数都应该是NVARCHAR,而不是VARCHAR(尽管我很好奇为什么你没有将xml作为XML返回)。

DECLARE 
    @TableName NVARCHAR(512),
    @sql NVARCHAR(MAX),
    @xml NVARCHAR(MAX);

SET @TableName = N'dbo.Feeds';

SET @sql = N'SELECT @xml = CONVERT(NVARCHAR(MAX), (
    SELECT * FROM ' + @TableName + ' FOR XML AUTO, ELEMENTS));';

EXEC sp_executesql @sql, N'@xml NVARCHAR(MAX) OUTPUT', @xml OUTPUT;

SELECT @xml;