2014-11-08 32 views
1

我想用存儲過程XQuery的插入/更新價值

declare @PropertyName  nvarchar(500) 
declare @PropertyValue  nvarchar(MAX) 

set @PropertyName = 'BackupPath' 
set @PropertyValue = 'MyTestPath' 

DECLARE @ExistingSettings XML; 
DECLARE @NewSettings nvarchar(MAX); 

SET @ExistingSettings = (SELECT TOP(1) CAST(SettingsDefinition AS XML) FROM ApplicationSettings) 

SET @ExistingSettings.modify('replace value of (/Properties/*[local-name() = sql:variable("@PropertyName")]/text())[1] with sql:variable("@PropertyValue")') 

UPDATE ApplicationSettings 
SET SettingsDefinition = CAST(@ExistingSettings AS nvarchar(MAX)), LastUpdate = GetDate() 
WHERE ID = (SELECT TOP(1) ID FROM ApplicationSettings) 

這樣一個

<?xml version="1.0" encoding="utf-16"?> 
<Properties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<BackupPath>MyLocalPath</BackupPath> 
</Properties> 

更新XML和只要能正常工作爲 'BackupPath' 包含價值

<BackupPath>MyLocalPath</BackupPath> 

如何修改此查詢以插入值(或者在需要時驗證)如果

<BackupPath /> 

回答

0

只需在XPath中不需要文本節點即可。

SET @ExistingSettings.modify(
    'replace value of (/Properties/' + @PropertyName + ')[1] with sql:variable("@PropertyValue")' 
) 
+0

我現在收到一條錯誤消息。 XML數據類型方法「modify」的參數1必須是字符串文字。 – davorn 2014-11-08 11:15:52

+0

無論如何,這種方法有效嗎? http://stackoverflow.com/a/21457475/18771 – Tomalak 2014-11-08 11:40:57