0

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

我有大量客户的姓名和年龄,我想编写允许在一次通话中插入整个列表的查询?这可能吗?

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

我是 Linq-to-SQL 和存储过程的新手,因此将不胜感激。

4

2 回答 2

2

Linq 不是完成这项任务的最佳方法。对于大量插入,我建议改为 Bulk Insert:

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

于 2013-07-01T12:49:27.663 回答
0

您可以将列表作为 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)

请注意,据我所知,一次插入仍然有 1,000 个限制。

于 2013-07-01T12:55:01.370 回答