我将动态 SQL 存储在必须在某些条件下执行的 SQL 表中。目前,我们使用游标来为我们处理这个问题,但我总是被告知尽可能避免使用游标,因为它们不是最有效的做事方式。所以,我的问题是:我如何在没有它们的情况下执行动态 SQL(如果有办法的话)?整个系统是围绕这个动态的 SQL 混乱构建的,所以没有改变它。
为此,只需假设表有Id AS IDENTITY
和SQL AS VARCHAR
字段,其中 SQL 字段包含要执行的 SQL(显然)。
编辑: 基本上,我想遍历表并在 SQL 列中执行 SQL。
因此,表中的一行基本上如下所示:
ID SQL
-- ----------------------
1 SELECT * FROM RECORD
2 SELECT * FROM PERSON
3 SELECT * FROM LOCATION
我没有写任何代码,因为我写的是一个游标来遍历表并执行它。我只是不知道循环表并将该字符串作为 SQL 查询执行的任何其他方法,例如:
DECLARE @sql VARCHAR(MAX)
DECLARE _cursor CURSOR
FOR
SELECT [SQL]
FROM #tmp2
OPEN _cursor
FETCH NEXT FROM _cursor INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ( @sql )
END
CLOSE _cursor
DEALLOCATE _cursor