【问题标题】:Best way to loop through a table with queries and execute them循环遍历带有查询的表并执行它们的最佳方法
【发布时间】:2021-05-19 11:35:12
【问题描述】:

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

例如,表格如下所示:

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

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

【问题讨论】:

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

标签: sql-server tsql stored-procedures


【解决方案1】:

您可以尝试结合使用FOR 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 连接它们...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多