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')
);