特定の条件下で実行する必要がある 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