有人能给我一个示例脚本,用于在SQL Server中使用存储过程批量插入/更新表中的记录吗?
答案 0 :(得分:2)
我过去做过类似的事情:
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 :(得分: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;
这些来自here,它也在SQL查询结束时查看了这个和xml方法的性能。
This着眼于数据传输端的性能。记住要记住的数据和来回传递的数据的大小,以及如何在查询中使用它来选择最佳方法。