SQL XMLNS在sp_executesql存储过程中失败
我有以下资料:SQL XMLNS在sp_executesql存储过程中失败,sql,xml-namespaces,Sql,Xml Namespaces,我有以下资料: DECLARE @csXml XML , @changeStatus XML , @tNum NVARCHAR(25) = '0001aa17' SELECT @csXml = ChangeSet FROM [Issues] WHERE [TrackingNumber] = @tNum SET @changeStatus = ( SELECT NEWID()
DECLARE @csXml XML
, @changeStatus XML
, @tNum NVARCHAR(25) = '0001aa17'
SELECT @csXml = ChangeSet
FROM [Issues]
WHERE [TrackingNumber] = @tNum
SET @changeStatus =
(
SELECT NEWID() AS [@id]
, 'me@sample.com' AS [@by]
, '1E910737-D78C-E711-9C04-00090FFE0001' AS [@byAccountId]
, '2018-01-18T18:39:03.220Z' AS [@when]
, 'Status' AS [property/@id]
, 'Status' AS [property/@name]
, 'In Review' AS [property/@old]
, 'Closed' AS [property/@new]
, '' AS [collections]
FOR XML PATH('change')
);
-- Add node to XML...
SET @csXml.modify(N'declare default element namespace "http://www.sample.com/ChangeSet/2017/09";
insert sql:variable("@changeStatus") as last into (/changes)[1]');
SET @ParamDef = N'@TrackingNumber NVARCHAR(25)
, @ChangeSet XML';
SET @sql = 'EXEC [SaveIssue] @TrackingNumber, @ChangeSet';
EXEC [sys].[sp_executesql] @sql
, @paramDef
, @TrackingNumber = @tNum
, @ChangeSet = @csXml;
我得到一个错误:
Msg 6965,第16级,状态1,过程SaveIssue,第27行XML
验证:无效内容。预期要素:
“{}改变”。发现:元素
改为“改变”。位置:/:更改[1]/:更改[4]
我知道我调用的存储过程正在抛出此错误。我不知道如何正确调用此存储过程以使其停止!:)
存储过程的(截断的)定义为:
CREATE PROCEDURE [SaveIssue]
( @TrackingNumber NVARCHAR(25)
, @ChangeSet XML(DOCUMENT Reference.sample) = N'<changes xmlns="http://www.sample.com/ChangeSet/2017/09" />'
)
AS
BEGIN
...
END
创建过程[SaveIssue]
(@TrackingNumber-NVARCHAR(25)
,@changesetXML(documentreference.sample)=N“
)
作为
开始
...
结束
我已经尝试将XMLNS定义与XML声明联系起来,将最后的@csXml转换为XML,然后再转换回XML(文档…),等等。到目前为止,我所尝试的一切都不起作用。我还尝试了使用XMLNAMESPACE…对@changeStatus选择进行
。我有点不知所措 使用CTE为我解决了这个问题。首先,我必须将设置
更改为选择
。然后添加了带有XMLNAMESPACE…
部分的。下面是创建我要插入的节点的更正部分:
;WITH XMLNAMESPACES (DEFAULT 'http://www.sample.com/ChangeSet/2017/09')
SELECT @changeStatus =
(
SELECT NEWID() AS [@id]
, 'me@sample.com' AS [@by]
, '1E910737-D78C-E711-9C04-00090FFE0001' AS [@byAccountId]
, '2018-01-18T18:39:03.220Z' AS [@when]
, 'Status' AS [property/@id]
, 'Status' AS [property/@name]
, 'In Review' AS [property/@old]
, 'Closed' AS [property/@new]
, '' AS [collections]
FOR XML PATH('change')
);