Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 循环查询表并执行查询的最佳方法_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server 循环查询表并执行查询的最佳方法

Sql server 循环查询表并执行查询的最佳方法,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有一个表,其中包含一列查询。我需要逐个执行它们,并将结果保存在另一个表中。在存储过程中实现此逻辑的最佳方法是什么 例如,该表如下所示: id query 1 select count(*) from table_a 2 select count(*) from table_b 光标可以是一个选项,但还有其他方法吗?您可以尝试使用XML的和动态SQL的组合执行此任务: DECLARE @mySchema NVARCHAR(10) = 'dbo' DECLARE

我有一个表,其中包含一列查询。我需要逐个执行它们,并将结果保存在另一个表中。在存储过程中实现此逻辑的最佳方法是什么

例如,该表如下所示:

id      query
1       select count(*) from table_a
2       select count(*) from table_b

光标可以是一个选项,但还有其他方法吗?

您可以尝试使用XML的
和动态SQL的组合执行此任务:

DECLARE @mySchema NVARCHAR(10) = 'dbo'
DECLARE @stmt NVARCHAR(MAX) = '';

SELECT @stmt = (SELECT stmt FROM(
SELECT STUFF((
SELECT ' UNION ALL SELECT ' + CHAR(39) + s.name + '_' + o.name + CHAR(39) + ' AS TabName, COUNT(*) AS Cnt FROM ' + s.name + '.' + o.name
  FROM sys.all_objects o
  JOIN sys.schemas s ON s.schema_id = o.schema_id
  WHERE o.type = 'U'
    AND s.name = @mySchema
  FOR XML PATH('')
), 1, 11, '') AS stmt
) xm)

EXEC(@stmt)

但是,如果只需要某些表,则必须稍微修改查询。此外,您可以修改查询以从表中获取所选内容,并通过UNION ALL将其联接起来。

查询是否总是返回一行一列?您没有指定目标表架构,这可能会影响解决方案。目标表是否只有一个int列?您的所有查询是否都从表中选择count?您的示例数据表明是这样的?这将是动态SQL的一个小问题。但是,您需要详细说明所需的结果/结构。您希望结果如何:每个
id
及其结果,还是所有结果的总和?