使用存储过程进行批量插入/更新

5

有人能给我一个在SQL Server中使用存储过程批量插入/更新表记录的示例脚本吗?


批量更新什么?数据源是什么?为什么要使用存储过程? - Oded
我想要一个在Ms Sql中创建批量插入/更新特定表记录的存储过程脚本。 - user335160
2个回答

4

我过去做过类似的事情:

CREATE PROCEDURE InsertProductIds(@ProductIds xml) AS

INSERT INTO Product (ID) 
SELECT ParamValues.ID.value('.', 'VARCHAR(20)')
FROM   @ProductIds.nodes('/Products/id') as ParamValues(ID) 

END

显然,这只是一个单列的表格,但 XML 方法也适用于多列的表格。 然后你要这样做:
EXEC InsertProductIds @ProductIds='<Products><id>3</id><id>6</id></Products>'

1
发送表值参数是另一个选项。
SQL
CREATE TYPE TestTableType AS TABLE 
(
    ID INT,
    Name NVARCHAR(100), 
    Description NVARCHAR(2000)
);
GO
CREATE proc [dbo].[Test_Table_Parameter]
    @Tbl TestTableType READONLY
as
    SELECT 'Return'
GO

代码

var param = new SqlParameter();
    param.ParameterName = "@Tbl";
    param.SqlDbType = SqlDbType.Structured;
    var dt = new DataTable();
    var str = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + DateTime.Now;

    //map the fields to datatypes here
    dt.Columns.Add("ID", typeof (Int32));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Description", typeof(string));

    for (var i = 0; i < rows; i++)
    {
        dt.Rows.Add(new object[] {i + 1, (i + 1).ToString(), str });
    }

    param.Value = dt;

这些内容取自此处,该网站还研究了SQL查询端的性能和使用XML方法的性能。这篇文章则关注数据传输端的性能。请记住两者,并考虑数据的大小以及在查询中如何使用它来选择最佳方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接