Вставка константы / переменной вместе с XML в SQL Server 2008 - PullRequest
1 голос
/ 26 февраля 2012

Я уверен, что на этот вопрос уже отвечали, но я не могу найти правильную номенклатуру, чтобы найти ответ.

По сути, у меня есть очень простая таблица с 2 столбцами, оба типа данных int

Теперь я пытаюсь вставить n записей в таблицу с одним из столбцов, предоставляемых через XML, следующим образом:

<Data> 
    <DepartmentID>{x}</DepartmentID>
</Data> 

вместе с константным значением @ProcedureID передается в качестве переменной в хранимую процедуру.

Я пытаюсь сделать следующее:

EXEC sp_xml_preparedocument @Handle OUTPUT, @Tags

INSERT INTO Accounting.DepartmentProcedure
(ProcedureID,DepartmentID)
SELECT @ProcedureID,DepartmentID
FROM OPENXML(@Handle,'/Data/DepartmentID',2) WITH (DepartmentID int)

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

Сообщение 515, Уровень 16, Состояние 2, Строка 7
Невозможно вставить значение NULL в столбец DepartmentID, таблица «RCH.Accounting.DepartmentProcedure»; столбец не допускает пустых значений. Вставить не удается.

Что касается меня, я не могу понять, как бороться с этой проблемой.

Заранее спасибо

1 Ответ

1 голос
/ 26 февраля 2012

Я бы использовал встроенную функциональность XQuery в SQL Server:

DECLARE @input XML = '<Data> 
    <DepartmentID>{x}</DepartmentID>
</Data>'

INSERT INTO 
    dbo.Accounting.DepartmentProcedure(ProcedureID, DepartmentID)

    SELECT 
        @ProcedureID,
        @input.value('(/Data/DepartmentID)[1]', 'int') 

Вставляет значение <DepartmentID>, извлеченное из XML, в столбец DepartmentID.

Перейдите сюда, чтобы прочитать больше о поддержке XQuery в SQL Server 2005 или прочитать Введение в XQuery в SQL Server 2005 на MSDN

...