在 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 文章详细解释了该主题
我需要在存储过程中插入一列,该存储过程读取 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 文章详细解释了该主题