xml - 在 SQL Server 中,是否可以将多个插入替换为采用 XML 参数的单个插入?

标签 xml sql-server-2008 insert

所以我有一个现有的 ASP.NET 解决方案,它使用 LINQ-to-SQL 将数据插入 SQL Server(5 个表,总共 110k 条记录)。我过去曾读到 XML 可以作为参数传递给 SQL Server,但我的谷歌搜索显示将 XML 直接存储到表中的结果。我宁愿采用该 XML 参数并将节点作为记录插入。

这可能吗?它是如何完成的(即 XML 参数如何用于在 T-SQL 中插入记录,XML 应如何格式化)?

注意:我正在研究其他选项,例如 SQL 批量复制,我知道 SSIS 是一个不错的选择。我想知道这种 XML 方法是否可行。

最佳答案

XML 的格式应与普通 XML 文档一样。然后您只需将它传递给使用参数类型 XML 的存储过程。

这是一个关于如何插入的例子。在这种情况下,@p_AdditionalContactInfo 是 XML,它的格式如下:

<entities>
  <entity>
    <firstName>Joey</firstName>
    ...        
  </entity>
  .. more entity records
</entities>

这是 t-sql 示例:

  DECLARE @l_index int

  -- parse the records from the XML
  EXECUTE sp_xml_preparedocument @l_index OUTPUT, @p_AdditionalContactInfo
  INSERT INTO @l_AdditionalContactInfoTbl
            ( ContactInfoID
            , FirstName
            , LastName 
            , ContactTypeID
            , Title
            , Email
            , AddressLine1
            , AddressLine2
            , City
            , State
            , Zip
            , MobilePhone
            , BusinessPhone
            , UpdateDateTime )
       SELECT ContactInfoID
            , FirstName
            , LastName
            , ContactTypeID
            , Title
            , Email
            , AddressLine1
            , AddressLine2
            , City
            , State
            , Zip
            , MobilePhone
            , BusinessPhone
            , UpdateDateTime
         FROM OPENXML (@l_index, 'entities/entity', 1)
              WITH (  ContactInfoID  int          'id'
                    , FirstName      varchar(50)  'firstName'
                    , LastName       varchar(50)  'lastName'
                    , ContactTypeID  int          'contactTypeId'
                    , Title          varchar(20)  'title'
                    , Email          varchar(100) 'email'
                    , AddressLine1   varchar(100) 'addressLine1'
                    , AddressLine2   varchar(100) 'addressLine2'
                    , City           varchar(50)  'city'
                    , State          varchar(2)   'state'
                    , Zip            varchar(5)   'zip'
                    , MobilePhone    varchar(12)  'mobilePhone'
                    , BusinessPhone  varchar(12)  'businessPhone'
                    , UpdateDateTime datetime     'updateDateTime'
                   )
  EXECUTE sp_xml_removedocument @l_index

关于xml - 在 SQL Server 中,是否可以将多个插入替换为采用 XML 参数的单个插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2729812/

相关文章:

python - 通过lxml python更改xml中的属性值

sql-server-2008 - 如何将存储过程部署到生产中

sql - 分解 SQL 代码 - MS SQL Server

sql - 在 postgresql 中插入 ... 值(SELECT ... FROM ...)?

C# List 在 foreach 中插入

java - 在android中调用soap webservice

javascript - 如何从json对象中获取特定的键和值存储在数据库中?

android - RelativeLayout 没有意义

mysql - 如何将Common table expression查询的Row_number转换为Mysql

mysql - INSERT ... IGNORE 来自另一个表