Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将数据表传递到存储过程的最佳方式是什么?_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 将数据表传递到存储过程的最佳方式是什么?

Sql server 将数据表传递到存储过程的最佳方式是什么?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我需要将DataTable传递到MS SQL 2008中的存储过程中,以便同时将多行插入表中。我曾遇到过使用XML文档进行此操作的方法,甚至将列表作为图像数据传递 实现这一目标的最佳方式是什么 如果可能,提供代码示例和/或引用。看一看,表值参数是一个不错的选择,我个人更喜欢在调用存储过程中创建一个临时表,并从被调用过程中的临时表中读取 因此,在代码中: CREATE PROC DoStuff AS BEGIN CREATE TABLE #tobeinserted (Data1 INT,

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

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


如果可能,提供代码示例和/或引用。

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

因此,在代码中:

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的两个实例。

谢谢。这正是我所需要的。:)