2012-05-01 58 views
1

有没有办法将exec语句的结果存储在varchar中?如何将动态SQL的结果存储到变量中

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 

回答

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; 
相关问题