Wil*_*ill 9 .net c# sql bulkinsert
如何批量调用存储过程?我想做一些像批量复制的东西.
存储过程所做的全部是8选择唯一约束和8个插入.没有回报价值.
你不能这样做.
批量复制是一个firehose数据转储到表中,您不能调用sprocs或其他任何东西,而不是只是将其转储到现有的表中.
但是,您可以做的是使用批量复制将数据转储到具有正确结构的临时表中,然后调用您的sproc将该数据移动到真实表中,可能通过修改现有数据而不是插入它,或者诸如此类.
如果您使用的是 SQL Server 2008,那么表值参数是一个可行的选择。
首先,创建一个用户定义的表类型,其中包含 SQL Server 端的所有预期列和数据类型:
create type dbo.MyTableType as table
(
foo int,
bar varchar(100)
);
Run Code Online (Sandbox Code Playgroud)
然后将上述内容用作存储过程的表类型参数:
create procedure uspInsertMyBulkData
(
@myTable dbo.MyTableType readonly
)
as
/* now in here you can use the multi-row data from the passed-in table
parameter, @myTable, to do your selects and inserts*/
Run Code Online (Sandbox Code Playgroud)
然后,在 C#/.NET 客户端,通过 ADO.NET 调用此存储过程并传入 、DataTable从DbDataReader(例如DataTableReader)继承的对象或类型的对象IEnumerable<SqlDataRecord>:
// create my source DataTable
object [] row1 = {1, "a"};
object [] row2 = {2, "b"};
var myDataTable = new DataTable();
myDataTable.Columns.Add(new DataColumn("foo"));
myDataTable.Columns.Add(new DataColumn("bar"));
myDataTable.LoadDataRow(row1, true);
myDataTable.LoadDataRow(row2, true);
// bulk send data to database
var conn = new SqlConnection(connectionString);
var cmd = new SqlCommand("uspInsertMyBulkData", conn)
{
CommandType = CommandType.StoredProcedure
};
SqlParameter param = cmd.Parameters.AddWithValue("@myTable", myDataTable);
param.SqlDbType = SqlDbType.Structured;
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9942 次 |
| 最近记录: |