1
我對XML XQuery很陌生,但這確實看起來應該起作用。SQL XML XQUERY - 看起來是正確的,返回NULL /空值
XML片段
<Contacts>
<Contact ContactID="7" FileType="MS">
<ID>7</ID>
....
<Comments ContactID="7" />
<CompanyID ContactID="88">Some New Value</CompanyID>
<CompanyName ContactID="7">Some New Value</CompanyName>
</Contact>
</Contacts>
我在@SourceField
傳遞給存儲過程。在這種情況下,它的值是CompanyID
。然後我創建一個變量,我打電話@xmlPath
。
SET @XmlPath = '/Contacts/Contact/' + @SourceField
我從表中檢索的XML到名爲@ContactData
變量(見上文片段)
我然後創建一個可變@SqlCmd
並執行它。
SET @SqlCmd = 'SET @ContactID = @ContactData.value(''(' + @xmlPath + '/@ContactID)[1]'', ''nvarchar(max)'')'
EXECUTE sp_executesql @SqlCmd, N'@ContactID nvarchar(20), @ContactData XML',@ContactID, @ContactData
我發出三個SQL命令來測試這些值。
SELECT @ContactData AS ContactData
SELECT @SqlCmd AS SqlCmd
SELECT @ContactID AS ContactID
第一個返回表中的XML。 (見上面的片段)
第二個返回如下;
SET @ContactID = @ContactData.value('(/Contacts/Contact/CompanyID/@ContactID)[1]', 'nvarchar(max)')
看起來正確的,但...
和第三回報NULL
當我期望88
。另外,當我初始化@ContactID = ''
時,我收到空字符串。
所以,我的結論是,我錯過了某處的分配過程,但代碼看起來像我在網上看到的每個例子都有效。我必須錯過簡單的事情。
有什麼想法?
謝謝!
的Mikael您好,感謝!這解決了這個問題。我只是知道它必須是簡單的東西。昨晚,在試圖在與這個問題搏鬥後的午夜睡覺的時候,我認爲它必須是這樣的。我非常欣賞第二套眼睛!事實上,我錯過了一些非常簡單的事情。 :) –