我正在尝试创建一个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函数的存储过程。
答案 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