如何从 table 变量执行 sql 结果集

How to execute a sql resultset from a table variable

我有一个简单的查询

SELECT 'kill ' + '''' + session_id + '''' FROM sys.dm_pdw_waits
where object_name like 'dw_prd.F%'

union

SELECT 'kill ' + '''' + session_id + '''' FROM sys.dm_pdw_waits
where object_name like 'dw_prd.D%'

这是结果集

我想按原样执行结果集,这意味着所有的杀戮都应该执行。我试着把它变成一个变量并执行它,但它没有执行

执行此结果集的最简单方法是什么。

您必须在此处使用动态 SQL。一种方法是聚合字符串,然后作为一批执行。根据文档,Azure Synapse 支持 STRING_AGGsys.sp_executesql,但是,我无法检查它是否真的有效:

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);

SELECT @SQL = STRING_AGG(N'KILL ' + QUOTENAME(session_id, N'''') + N';',@CRLF)
FROM sys.dm_pdw_waits
WHERE object_name LIKE 'dw_prd.[FD]%';

EXEC sys.sp_executesql @SQL;