遍历CTE结果并针对每个结果运行查询

时间:2018-08-10 11:42:45

标签: sql sql-server loops stored-procedures

我正在尝试创建一个SQL查询/过程,以遍历CTE带回的记录。

CTE将返回必须执行查询的表的表名。

示例CTE结果:

op2018al
op290717al

更多...

需要为CTE中的两个表运行的查询为:

SELECT COUNT(*) AS Records_missing
FROM scheme./** tables form the CTE **/ a WITH (NOLOCK)
WHERE NOT EXISTS (
        SELECT *
        FROM table_a b WITH (NOLOCK)
        WHERE a.COLUMN = b.COLUMN
        )

我相信这将是一个包含CURSOR函数的存储过程。

1 个答案:

答案 0 :(得分:2)

由于需要使用动态SQL,因此可以对单个表形成查询,并UNION ALL生成结果

declare @sql    nvarchar(max)

; with cte as
(
    < your cte query> 
)
select  @sql    = isnull(@sql + char(13) + 'UNION ALL' + char(13), '')
        + 'SELECT tbl_name = ''' + tbl_name + ''', COUNT(*) AS Records_missing'  + char(13)
        + 'FROM ' + quotename(tbl_name) + ' AS a'                                + char(13)
        + 'WHERE NOT EXISTS ('         + char(13)
        + 'SELECT *'                   + char(13)
        + 'FROM  table_a b'            + char(13)
        + 'WHERE a.COLUMN = b.COLUMN)' + char(13)
from    cte 

print   @sql
exec    sp_executesql @sql