在每一行上执行不同的查询

时间:2018-06-05 14:07:22

标签: sql-server sql-server-2008

我有两个表,tbl1tbl2tbl2是我存储数据的地方,而tbl1是我存储不同查询以在每一行上执行的地方。

示例:Row1可能具有从tbl2中提取最大值的查询。 tbl1上的第2行可能必须查询从tbl2中提取NOT NULL值等等...

我正在使用联接运行查询并从tbl1tbl2

中提取数据

如何遍历tbl1上的每一行,以便逐个执行每个查询并将结果存储在某处?

我正在考虑使用WHILE LOOP但我的SQL知识如果不是那么先进,我正在用这种方法遇到障碍。有人可以指导我吗?

1 个答案:

答案 0 :(得分:0)

所以你将这些查询存储为文本?如果您需要查询灵活,则必须使用游标中的动态SQL执行它们。

DECLARE @sql VARCHAR(MAX);

DECLARE curs CURSOR FOR 
SELECT Sql 
FROM dbo.Tbl1;

OPEN curs;
FETCH NEXT FROM curs INTO @sql;  

WHILE @@FETCH_STATUS = 0  
BEGIN  
    -- Assuming tbl1 contains expressions evaluating to a scalar value like 'MAX(Col1)'
    EXEC('INSERT INTO dbo.Results SELECT ' + @sql + ' FROM dbo.Tbl2');
    FETCH NEXT FROM curs INTO @sql;  --without this, your cursor will stuck
END;

CLOSE curs;  
DEALLOCATE curs; 

当然,使用动态SQL存在安全性和性能方面的缺点。我假设这些查询正在被应用程序或其他东西修改。如果它们不会经常改变,你应该考虑制作用户定义的函数/存储过程,而不是将它们存储在表格中。