如何从 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_AGG
和 sys.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;
我有一个简单的查询
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_AGG
和 sys.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;