【发布时间】:2015-08-19 11:41:35
【问题描述】:
我需要在存储过程中插入一个列,该存储过程读取 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' 的元素。
有人可以帮我解决这个问题吗?
如果需要进一步的详细信息,请告诉我。
问候, 维斯瓦诉。
【问题讨论】:
-
看起来您的变量命名在您的示例中无处不在,您的 SP 中有名为“@ContactDetails”的变量不存在,“//EmailDetails/IslConfirmed)[1]”节点名称不正确,“INSERT INTO dbo.emails”的表名称错误。除此之外,当你整理它时它工作正常,你确定你不会错过向我们展示其他东西吗?
-
嗨,杰米,抱歉打错了。我已经编辑了页面。我想知道我的输入 XML 的语法,提到 (Document
)。我不太了解 XML。你能帮我解释一下吗?
标签: sql-server xml xquery-sql