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

som*_*ool 1 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
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 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;
Run Code Online (Sandbox Code Playgroud)