打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL将表作为参数传入存储过程

SQL将表作为参数传入存储过程

(2014-07-31 10:25:25)


 
     在工作中用到要遍历文件夹中的文件将文件中的数据按照行导入到数据库中。由于文件夹中文件可能会有很多并且每个文件中有很多行数据,所以不可能一行一行的插入数据库因为这样插入太慢感觉太耗费性能了。
      因此想到要将所有数据先存放到一个DataTable中,然后将一个DataTable作为一个参数一次性插入到数据库,这样方便了很多,并且插入速度快上很多。(PS:一行一行要5,6S的这样几乎是秒传)
     ①、首先SQL应该做的工作:
     --Table type【必备】
CREATE TYPE dbo.TestDataTypeAS TABLE
             (TableName nvarchar(50),
            Contents nvarchar(max)    --可以为表中的某一些字段
if exists (select from sysobjects where type 'P' and name 'spImportTableSqlByTable')        drop procedure dbo.spImportTableSqlByTable;
go

    
CREATE procedure spImportTableSqlByTable          
@InsertData TestDataTypeREADONLY       --@InsertData为C#中要传入的表参数
as
begin     
       insert into TableSql (TableName,Contents)            
       select TableName,Contents 
        from  @InsertData  
end
go
       ②、数据库的存储过程写好后,下面我们就要在后台传入数据了
//c#调用该存储过程:
DataTable dt = new DataTable();
dt.Columns.Add("TableName", Type.GetType("System.String"));
dt.Columns.Add("Contents", Type.GetType("System.String"));

foreach (string line in lines)
{
   dt.Rows.Add(index,line);
   index++;
}

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "spImportTableSqlByTable";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@InsertData", SqlDbType.Structured);
cmd.Parameters[0].Value = dt;
cmd.ExecuteNonQuery();
con.Close();
        以上就是将表作为一个参数传入到存储过程中。个人感觉速度还是很快的,并且很多地方能用到,也可能还有其他的方法,希望大家多多提意见,共同学习!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#下SQL Server 2008表类型参数传递 - 51CTO.COM
[C#新手入门 三] 使用DataTable作为存储过程的参数
总结:ADO.NET在开发中的部分使用方法和技巧 ()
C#中调用输入输出参数的存储过程
C#执行存储过程的简化
C# DBHelper类 参考
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服