在SQL Server 2008中插入常量/变量以及XML

时间:2012-02-26 10:44:32

标签: sql-server-2008 sql-server-openxml

我确信之前已经回答过,但我找不到合适的术语来找到答案。

基本上,我有一个非常简单的表,有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)

以上解析很好,但运行它会给我以下错误:

  

Msg 515,Level 16,State 2,Line 7
  无法将值NULL插入列'DepartmentID',表'RCH.Accounting.DepartmentProcedure';列不允许空值。   INSERT失败。

对于我的生活,我无法弄清楚如何处理这个问题。

提前致谢

1 个答案:

答案 0 :(得分:1)

我会在SQL Server中使用内置的XQuery功能:

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

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

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

这会将从XML中提取的<DepartmentID>值插入DepartmentID列。

点击此处详细了解XQuery support in SQL Server 2005或阅读Introduction to XQuery in SQL Server 2005 on MSDN