在 SQL 服务器中使用 XQuery 将元素插入 XML

Insert element into XML using XQuery in SQL Server

我需要在存储过程中插入一列,该存储过程读取 XML 作为输入并使用 SQL 服务器中的 XQuery 读取 XML 值。

考虑 table dbo.emailDetails

Create Table dbo.emailDetails
(
     EmailId int,
     HomeEmail varchar(250),
);

XML 文件:

<EmailDetails xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <EmailId>1</EmailId>
    <HomeEmail>test@sample.com</HomeEmail>
</EmailDetails>

SQL 服务器存储过程:

CREATE PROCEDURE [apply].[UpdateEmailDetails]
     @EmailDetails XML
 (DOCUMENT [dbo].[EmailDetails])
AS 
BEGIN
    DECLARE @EmailId INT, @HomeEmail NVARCHAR(250)

    SET @HomeEmail = @EmailDetails.value(N'(//EmailDetails/HomeEmail)[1]',N'NVARCHAR(255)');
    SET @EmailId = @EmailDetails.value(N'(//EmailDetails/EmailID)[1]',N'INT');

    INSERT INTO dbo.emails (emailid, homeemail) 
    VALUES (@EmailId, @HomeEmail )
END

现在我想在上面的存储过程中包含 IsConfirmed

 alter table dbo.Emaildetails
    add IsConfirmed bit not null default 0

----- Executed successfully and added the new column in the table.

虽然我在存储过程中尝试了以下更改:

Declare @IsConfirmed bit
SET @IsConfirmed = @EmailDetails.value(N'(//EmailDetails/IsConfirmed)[1]',N'BIT');

并得到错误:

XQuery [value()]: There is no element named 'IsConfirmed' in the type 'element(EmailDetails,#anonymous) *'.

有人可以帮我解决这个问题吗?

如果需要进一步的详细信息,请告诉我。

此致, Viswa V.

您的存储过程有一个输入参数如下:

@EmailDetails XML (DOCUMENT [dbo].[EmailDetails])

这意味着您定义了一个名为“[dbo].[EmailDetails]”的 XML 架构集合,它基本上说明了传入 XML 应该采用的格式。

如果您在数据库资源管理器中展开可编程性 > 类型 > XML 架构集合节点,您将看到“[dbo].[EmailDetails]”架构。如果您然后右键单击并 select Script as > Create to new window 您将看到在您传递给您的过程的 XML 中预期有哪些节点。

您需要更改此架构以包含新

的定义
<IsConfirmed>

节点。

一旦你改变它,你应该能够再次运行你的改变过程命令。

This MSDN 文章详细解释了该主题