如何编写SQL过程,以便一次从列表中插入多个项目

本文关键字:列表 一次 插入 项目 过程 SQL 何编写 | 更新日期: 2023-09-27 18:20:44

我正在使用Linq到SQL,为了生成我的Linq代码,我编写了一个存储过程,并将该过程放在我的dbml上。

我有一大堆客户的名字&age和我想写一个查询,允许在一个调用中插入整个列表?这可能吗?

目前,我使用foreach循环一次插入一个,这需要很长时间才能插入数千个客户。我对此进行了研究,但没有得到确切的解决方案。

我是Linq SQL和存储过程的新手,如果有任何帮助,我将不胜感激。

如何编写SQL过程,以便一次从列表中插入多个项目

Linq不是执行此任务的最佳方法。对于大量插入,我建议使用批量插入:

http://msdn.microsoft.com/en-us/library/ms188365.aspx

您可以将列表作为XML项传入,并通过SQL联接解析出其中的数据。

// Sample XML format
<customers>
     <customer>
         <name></name>
         <age></age> 
     </customer>
</customers>

您可以使用XElement对象(System.Xml.Linq命名空间)轻松完成此操作。

您希望您的存储过程接受一个参数:数据类型为xml,然后根据与之相关的节点的值进行插入(http://msdn.microsoft.com/en-us/library/ms188282.aspx)

DECLARE @item xml;
SET @item = 
N'<customers>
  <customer><name>Lorcan</name><age>24</age></customer>
  <customer><name>Robert</name><age>20</age></customer>
</customers>';
INSERT INTO YOUR_TABLE_NAME
SELECT 
T.c.query('name').value('.','varchar(max)') as Name,
T.c.query('age').value('.','int') as Age
FROM @item.nodes('/customers/customer') T(c)

请注意,据我所知,一次插入1000个仍然是有限制的。