我正在使用 Linq-to-SQL,为了生成我的 linq 代码,我编写了一个存储过程并将该过程放在我的 dbml 上。
我有大量客户的姓名和年龄,我想编写允许在一次通话中插入整个列表的查询?这可能吗?
目前我正在使用 foreach 循环一次插入一个,这需要很长时间才能插入数千个客户。我对此进行了研究,但没有得到确切的解决方案。
我是 Linq-to-SQL 和存储过程的新手,因此将不胜感激。
我正在使用 Linq-to-SQL,为了生成我的 linq 代码,我编写了一个存储过程并将该过程放在我的 dbml 上。
我有大量客户的姓名和年龄,我想编写允许在一次通话中插入整个列表的查询?这可能吗?
目前我正在使用 foreach 循环一次插入一个,这需要很长时间才能插入数千个客户。我对此进行了研究,但没有得到确切的解决方案。
我是 Linq-to-SQL 和存储过程的新手,因此将不胜感激。
Linq 不是完成这项任务的最佳方法。对于大量插入,我建议改为 Bulk Insert:
您可以将列表作为 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 个限制。