2012-03-05 13 views
3

私は、異なるパラメータで何度も実行する必要があるSQLストアドプロシージャを持っています。異なるパラメータの配列や他のデータ構造のように何度も実行されるある種のSQLスクリプトを実行することは可能ですか?これについての考えは?SQLクエリを異なるパラメータで複数回実行する

+0

を使用してprocのを保存しますか? DBテーブル? –

+0

テーブル内の特定の列。 – SoftwareSavant

+1

テーブル内の列の値をループし、ストアドプロシージャ呼び出しのパラメータとして使用できます。しかし、それは遅くなる可能性があります。場合によっては、ストアドプロシージャを非手続き型SQLとして書き換えるほうがよい場合もあります(可能であれば)。もちろん、コードを表示していないので、あなたのケースで何が最善であるかを言うことは不可能です。 –

答えて

5

カーソルを使用します(しかし、それはあなたのコードを再構築することが可能です場合、YS's answerを試してみてください)することができます

EDITは:@ YSの提案

DECLARE @param INT 

-- getting your parameter from the table 
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR 
    SELECT afield FROM atable WHERE ... 

OPEN curs 

FETCH NEXT FROM curs INTO @param 

-- executing your stored procedure once for every value of your parameter  
WHILE @@FETCH_STATUS = 0 BEGIN 
    EXEC usp_stored_Procedure @param 
    FETCH NEXT FROM curs INTO @param 
END 

CLOSE curs 
DEALLOCATE curs 
+4

カーソルが読み取り専用で、前方に移動している場合は、パフォーマンスを向上させるために 'FAST_FORWARD'を使用することを検討してください。つまり: 'DECLARE curs CURSOR LOCAL FAST_FORWARD FOR ...' –

+0

@YS:そうです。提案していただきありがとうございます! –

+0

これは実際にはかなりうまく動作します。私は私のT-SQLで作業する必要があります – SoftwareSavant

5

私は思いますおそらく再編につきとしてFAST_FORWARDを追加しました

  • 挿入する値をsで実行する必要があります(カーソルを回避するには) tored procの一時テーブルへ、そして呼び出すストアドプロシージャ(ストアドプロシージャは、その後、一時テーブルを読み込みます)

  • コールはパラメータから来るのか、テーブル値パラメーター

関連する問題