0
我嘗試創建一個存儲過程來更新其sql語句是動態創建的表記錄。我編寫了一些代碼,但是被動態地運行這個查詢,我如何運行這個查詢或者是否有更好的解決方案來解決這個問題。動態創建更新存儲過程中的SQL
這怎麼SP工作?=>我發送需要更新到SP像下面
<e columnName=''PaymentStatus'' value=''99'' type=''nvarchar''/>
<e columnName=''HotelProvider'' value=''GAT2'' type=''nvarchar''/>
那麼行進中的節點,並創建一個更新語句中的列名,值和記錄的數據類型,但可以」執行它:))
我給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;
最後兩個SELECT語句的結果是:
@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
現在,我怎麼給@QP參數動態sp_executesql的()方法?
嘿,這是一個簡單的解決方案,謝謝。 – Yucel 2012-04-12 16:13:25