我有两个表,tbl1
和tbl2
。 tbl2
是我存储数据的地方,而tbl1
是我存储不同查询以在每一行上执行的地方。
示例:Row1可能具有从tbl2
中提取最大值的查询。
tbl1
上的第2行可能必须查询从tbl2
中提取NOT NULL值等等...
我正在使用联接运行查询并从tbl1
和tbl2
如何遍历tbl1
上的每一行,以便逐个执行每个查询并将结果存储在某处?
我正在考虑使用WHILE LOOP但我的SQL知识如果不是那么先进,我正在用这种方法遇到障碍。有人可以指导我吗?
答案 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存在安全性和性能方面的缺点。我假设这些查询正在被应用程序或其他东西修改。如果它们不会经常改变,你应该考虑制作用户定义的函数/存储过程,而不是将它们存储在表格中。