将DataTable传递到存储过程的最佳方法是什么?

时间:2010-11-26 09:17:15

标签: sql-server sql-server-2008

我需要将DataTable传递到MS SQL 2008中的存储过程,以便同时在表中插入多行。我遇到过使用XML文档的方法,甚至将列表作为图像数据传递。

实现这一目标的最佳方法是什么?

尽可能提供代码示例和/或引用。

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

表值参数是一个不错的选择,我个人更喜欢在调用存储过程中创建临时表,并从被调用过程中的临时表中读取。

所以代码应该是:

CREATE PROC DoStuff
AS BEGIN
    CREATE TABLE #tobeinserted (Data1 INT, Data2 INT...)
    EXEC InsertRows
END

CREATE PROC InsertRows
AS BEGIN
    INSERT INTO Table1 SELECT * FROM #tobeinserted
END

这可靠地工作,因为临时表具有生命周期,直到创建它们的存储过程退出。此方法的一个优点是临时表与表值参数不同,可以定义(聚簇)索引,因此这些表中的查找可以非常快。缺点是您无法同时运行SP的两个实例。