所以我有一个现有的 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/