2015-08-19 3 views
2

Мне нужно вставить столбец в хранимую процедуру, которая читает XML как входную информацию и считывает значение XML с помощью XQuery в SQL Server.Вставить элемент в XML с помощью XQuery в SQL Server

Рассмотрим таблицу 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>[email protected]</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()]: There is no element named 'IsConfirmed' in the type 'element(EmailDetails,#anonymous) *'.

Может кто-нибудь помочь мне с этим?

Просьба сообщить мне, если требуются дальнейшие детали.

С уважением, Вишва V.

+0

выглядит как ваша переменная именование повсюду в вашем примере, вы назвали переменные «@ContactDetails» в вашем SP, не существует «// EmailDetails/IslConfirmed) [1] "имеет неправильное имя узла," INSERT INTO dbo.emails "имеет неправильное имя таблицы. Помимо этого, когда вы его убираете, это прекрасно работает, вы уверены, что вам не хватает, показывая нам что-то еще? –

+0

Привет, Джейми, Извините за опечатку. Я редактировал страницу. Я хочу знать синтаксис для моего ввода XMl, который упоминается как (Документ ). Я мало разбираюсь в XML. Не могли бы вы помочь мне объяснить это? – salaiviswa

ответ

1

Ваша хранимая процедура имеет входной параметр, который выглядит следующим образом:.

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

Это означает, что у вас есть XML-схемы Сборник под названием «[DBO] [EmailDetails] », который в основном говорит о том, в каком формате должен находиться входящий XML.

Если вы развернете узлы« Программируемость> Типы> XML-схемы »в вашем проводнике базы данных, вы увидите схему« [dbo]. [EmailDetails] ». Если вы щелкнете правой кнопкой мыши и выберите «Сценарий» как> Создать в новом окне, вы увидите, какие узлы должны находиться в XML, который вы передаете вашей процедуре.

Вы должны изменить эту схему, чтобы включить определение для нового узла

<IsConfirmed> 

.

После того, как вы измените его, вы сможете снова запустить команду alter procedure.

This MSDN статья объясняет больше по этой теме

+0

Привет, Джейми, Большое спасибо за ваше ценное предложение. Вы выполнили мои требования и точно дали решение. Это работает как шарм! Миллион благодаря вам! :) – salaiviswa

 Смежные вопросы

  • Нет связанных вопросов^_^