我对XML XQuery很新,但这肯定看起来应该有用。
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 = ''
时,我收到空字符串。
所以,我的结论是我在某个地方错过了一个任务流程,但代码看起来就像我在网上看到的每个例子都有效。我必须遗漏一些简单的东西。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
您需要将参数@ContactID
声明为输出参数。
试试这个:
EXECUTE sp_executesql @SqlCmd, N'@ContactID nvarchar(20) out, @ContactData XML',@ContactID out, @ContactData