1 使用表参数 2 表变量(Table Parameters)可以将整个表数据汇集成一个参数传递给存储过程或SQL语句。它的注意性能开销是将数据汇集成参数(O(数据量))。 3 定义了一个表参数jk_users_bulk_insert 4 5 CREATE TYPE jk_users_bulk_insert AS TABLE ( 6 user_login varchar(60), 7 user_pass varchar(64), 8 user_nicename varchar(50), 9 user_email varchar(100), 10 user_url varchar(100), 11 user_activation_key varchar(60), 12 user_status int, 13 display_name varchar(250) 14 ) 15 定义一个存储过程接受表参数jk_users_bulk_insert 16 17 18 CREATE PROCEDURE sp_insert_jk_users 19 @usersTable jk_users_bulk_insert READONLY 20 AS 21 22 INSERT INTO jk_users (user_login, user_pass, user_nicename, user_email, user_url, 23 user_activation_key, user_status, display_name, user_registered) 24 25 SELECT user_login, user_pass, user_nicename, user_email, user_url, 26 user_activation_key, user_status, display_name, GETDATE() 27 FROM @usersTable 28 29 客户端代码中,调用存储过程并且将表作为参数方式传递给存储过程。 30 31 32 var sw = Stopwatch.StartNew(); 33 using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONN2"].ToString())) 34 { 35 conn.Open(); 36 //// Invokes the stored procedure. 37 using (var cmd = new SqlCommand("sp_insert_jk_users", conn)) 38 { 39 cmd.CommandType = CommandType.StoredProcedure; 40 41 //// Adding a "structured" parameter allows you to insert tons of data with low overhead 42 var param = new SqlParameter("@userTable", SqlDbType.Structured) { Value = dt }; 43 cmd.Parameters.Add(param); 44 cmd.ExecuteNonQuery(); 45 } 46 } 47 sw.Stop();