@proc_name
テーブル変数には、プロシージャ名が格納されており、動的SQLを使用してパラメータを渡しています。私は@proc_name
のすべての行をループするwhileループを使用しています。パフォーマンスを向上させるためにここでCTEを使用できますか?CTEで繰り返し実行する
SELECT *
FROM @proc_name
WHILE (@count <= @max)
BEGIN
SET @proc_exec = 'usp_Balance_'
+Replace((SELECT Description FROM @proc_name WHERE rn= @count),' ','')+' '+' '+''''
+Replace((SELECT TellerID FROM @proc_name WHERE rn= @count),' ','')+''''+' ,'+''''
[email protected]+''''+' , '+''''+cONvert(VARCHAR(100),@BusinessDate)+''''
-- Update TDrawerSummary
PRINT (@proc_exec)
SET @count = @count + 1
END
ありがとうございます。
DECLARE c CURSOR FOR
SELECT 'usp_Balance_'
+Replace(Description,' ','')+' '+' '+''''
+Replace(TellerID,' ','')+''''+' ,'+''''
[email protected]+''''+' , '+''''+cONvert(VARCHAR(100),@BusinessDate)+''''
FROM @proc_name
ORDER BY rn
OPEN c
FETCH c INTO @proc_exec
WHILE @@FETCH_STATUS=0
BEGIN
-- Update TDrawerSummary
PRINT @proc_exec
FETCH c INTO @proc_exec
END
CLOSE c
DEALLOCATE c
クエリに手続き型コードを変えるのを助けるためにCTEを使用することができますいくつかのケースでは:で始まる以下に示すようにカーソルでWHILEループを置き換えるために
これほど多くは改善できませんが、完全に理解するのは難しいでしょう。 '@ proc_name'の各レコードに対してストアドプロシージャを実行するために'動的SQL 'が必要なのは確実ですか?そのストアドプロシージャで実際に何が起こるのですか? – sgeddes
(SQL Serverの)CTEはパフォーマンスを向上させません。彼らは、クエリを理解しやすくします。 –
@ GordonLinoff - パフォーマンスを向上させました。一意であり、cteのインデックスに含まれる大きなテーブルから小さなフィールドセットを選択し、残りの列を取得するためにテーブルに再び参加します。 – Hogan