使用SQL Server中的XQuery将元素插入XML

时间:2015-08-19 11:41:35

标签: sql-server xml xquery-sql

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

考虑一个表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 Server存储过程:

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()]:'element(EmailDetails,#anonymous)*'类型中没有名为'IsConfirmed'的元素。

有人可以帮我这个吗?

如果需要进一步细节,请告诉我。

此致 Viswa V。

1 个答案:

答案 0 :(得分:1)

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

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

这意味着你有一个名为&#34; [dbo]的XML Schema Collection。[EmailDetails]&#34;定义了哪个基本上说明了传入XML应该采用的格式。

如果扩展可编程性&gt;类型&gt;数据库资源管理器中的XML Schema Collections节点您将看到&#34; [dbo]。[EmailDetails]&#34;架构。如果您然后右键单击并选择脚本为&gt;创建新窗口,您将看到在传递给过程的XML中预期有哪些节点。

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

的定义
<IsConfirmed>

节点。

一旦你改变它,你就应该能够再次运行你的alter procedure命令。

This MSDN文章详细介绍了该主题