1

これに対する解決策を探すために過去数時間を費やしましたが、まだ良い解決策が見つかりません。

私の問題はかなり簡単です。T SQL (SQL Server 2008 R2) で非常に大きなストアド プロシージャを作成していINSERTます。同じストアド プロシージャ内で同じものを何度も再利用する必要があります。ターゲット テーブルに膨大な数の列があります。

動的クエリをvarchar変数に定義してみました。次にsp_execute、すべてのパラメーターを指定して で実行すると、機能します。しかし、それを呼び出す必要があるときはいつでも、毎回同じ膨大な数のパラメーターを使用して呼び出しを複製する必要があるため、これは理想的なソリューションではありません。

私が探しているのは、INSERT実行する を定義し、使用する変数を指定してから、パラメーターを再度指定することなく、1 行のコードで呼び出すことができる方法です。

コードの再利用と可読性の観点から、誰かがより効率的なソリューションを教えてくれるかどうか疑問に思っていました。

前もって感謝します

4

2 に答える 2

1

CLR のユーザー定義型が良い答えかもしれません: http://msdn.microsoft.com/en-us/library/ms131120.aspx

パラメーターに対応するプロパティを使用して UDT を定義し、次のように、UDT のインスタンスをパラメーターとして受け取り、挿入を行うストアド プロシージャ (通常の T-SQL プロシージャが機能します) を作成します。

CREATE PROCEDURE dbo.InsertProc(@params MyUDT)
AS
    INSERT INTO dbo.T1 (a, b, c, d, e, f)
    VALUES (@params.a, @params.b, @params.c, @params.d, @params.e, @params.f);

次に、主な手順は次のようになります。

DECLARE @myParams AS MyUDT

-- call insert with initial parameters
SELECT @myParams.a = 1, @myParams.b = 2, @myParams.c = 3, @myParams.d = 4, @myParams.e = 5, @myParams.f = 6
EXEC dbo.InsertProc @myParams

-- change parameters a and b and call again
SELECT @myParams.a = 10, @myParams.b = 20
EXEC dbo.InsertProc @myParams
于 2013-07-05T18:00:50.437 に答える