我需要将DataTable传递到MS SQL 2008中的存储过程,以便同时在表中插入多行。我遇到过使用XML文档的方法,甚至将列表作为图像数据传递。
实现这一目标的最佳方法是什么?
尽可能提供代码示例和/或引用。
答案 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的两个实例。