我正在使用Linq-to-SQL,为了生成我的linq代码,我编写了一个存储过程并将该proc删除到我的dbml上。
我有很多客户名字和名单。年龄,我想写一个允许在一次调用中插入整个列表的查询?这可能吗?
目前我使用foreach循环一次插入一个,这需要很长时间才能插入数千个客户。我研究了这个,但没有得到确切的解决方案。
我是Linq-to-SQL和存储过程的新手,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
Linq不是完成此任务的最佳方法。对于大量插入,我建议使用Bulk Insert:
答案 1 :(得分: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)
请注意,据我所知,目前仍有一千个插入限制。