0

SQL Server 2012 を使用していますが、ストアド プロシージャのすべてのパラメータとそれに渡された値を取得する方法はありますか?

xmlを構築するにはこれらが必要です。これは、実行される手順で発生する必要があり、すべての手順に共通する必要があることを意味します。

たとえば、手続きをしなければならないとしましょう。

  1. uspSave, @name='test' @age=20
  2. uspDelete @id=2

uspSave手順では、@name, @age値「test」、20、および inuspDeleteを取得する必要があり、値 2 を取得する必要が@idあります。

列名を取得するために、これを試しましたが、

select parameter_name 
from information_schema.PARAMETERS 
where specific_name = OBJECT_NAME(@@procid)

上記のクエリの結果をループして値を取得できるようになりました。

4

1 に答える 1

0

最善の策は、コード生成を使用して、必要なコード ブロックを生成することだと思います。

すなわち

  • パラメーターを XML 化するコードを使用せずに sproc を作成する
  • クイック スクリプト (TSQL で実行可能) を作成し、INFORMATION_SCHEMA.PARAMETERS を使用してパラメーターを XML に変換する TSQL の sproc 固有のブロックを構築します。
  • 自動生成されたスクリプトの一部を sproc にコピーします

動的 SQL で考えていた方法は、スコープのために機能しません。動的に生成された SQL 内でパラメーターにアクセスできないため、sp_executesql を介して引数として渡す必要があり、正方形 1 に戻ります。

例えば

DECLARE @someval int = 7
EXECUTE('SELECT @someval') -- @someval is not in scope

したがって、時間を節約するのに役立つ場合は、コード生成が最善の策のようです。

于 2012-07-10T11:57:04.667 に答える