0
動的にSQLステートメントを作成するストアドプロシージャを作成してテーブルレコードを更新しようとしました。私はいくつかのコードを書いていますが、このクエリを動的に実行するのをやめました。このクエリを実行するにはどうすればよいですか?ストアドプロシージャ内の更新SQLを動的に作成
どのようにこのSPは動作しますか?=>私は「その後のノードを移動し、UPDATE文を作成し、列の名前、値、および
<e columnName=''PaymentStatus'' value=''99'' type=''nvarchar''/>
<e columnName=''HotelProvider'' value=''GAT2'' type=''nvarchar''/>
以下のようにSPにアップデート必要なレコードのデータ型を送ることができますが、それを実行:))
私はSPの一部を与えるより良い質問を理解する。
DECLARE @UpdateXml xml = '
<xml>
<e columnName=''PaymentStatus'' value=''99'' type=''nvarchar''/>
<e columnName=''HotelProvider'' value=''GAT2'' type=''nvarchar''/>
</xml>';
DROP TABLE ##UpdateFields
SELECT
t.c.value('@columnName', 'varchar(max)') AS ColumnName,
t.c.value('@value', 'varchar(max)') AS Value,
t.c.value('@property', 'varchar(max)') AS PropertyOf,
t.c.value('@type', 'varchar(max)') AS ColumnType
INTO ##UpdateFields
from @UpdateXml.nodes('/xml/e') as t(c)
DECLARE @SQL nvarchar(MAX) = 'UPDATE HotelBooking ';
DECLARE @SQLUpdatePart nvarchar(MAX);
SET @SQLUpdatePart = 'SET ';
SELECT @SQLUpdatePart= @SQLUpdatePart+ColumnName +'='+'@QP_'+ColumnName+',' FROM ##UpdateFields WHERE PropertyOf IS NULL;
DECLARE @SQLWherePart nvarchar(MAX);
SET @SQLWherePart = ' WHERE Id=2';
DECLARE @ParmDefinition nvarchar(MAX)='';
SELECT @ParmDefinition = @ParmDefinition+'@QP_'+ColumnName+' '+ColumnType+',' FROM ##UpdateFields;
SELECT @ParmDefinition
SELECT @SQL + @SQLUpdatePart + @SQLWHerePart;
最終2つの選択ステートメントの結果は以下のとおりです。
@QP_PaymentStatus nvarchar,@QP_HotelProvider nvarchar,@QP_TransactionId uniqueidentifier,@QP_UpdatedDate datetime
と
UPDATE HotelBooking SET [email protected]_PaymentStatus,[email protected]_HotelProvider,[email protected]_UpdatedDate,[email protected]_TransactionId WHERE Id=2
は今、どのように私は動的に()メソッドをsp_executesqlをする@QPパラメータを与えることができますか?
をねえ、これは簡単な解決策、感謝です。 – Yucel