sql 通过存储过程和自定义类型批量新增数据

1,建立存储过程

create PROCEDURE [dbo].[p_Company_Insert]
@CompanyCollection [CompanyTableType] READONLY
AS
INSERT INTO tb_Company (
            [cpID]
           ,[cpHiID]
           ,[cpBuySellTypeID]
           ,[cpName]
           ,[cpShortName]
           ,[cpIndustry]
           ,[cpSell]
           ,[cpBuy]
           ,[cpAddressID]
           ,[cpAddress]
           ,[cpPost]
           ,[cpTel]
		)

    SELECT
			oc.[cpID]
           ,oc.[cpHiID]
           ,oc.[cpBuySellTypeID]
           ,oc.[cpName]
           ,oc.[cpShortName]
           ,oc.[cpIndustry]
           ,oc.[cpSell]
           ,oc.[cpBuy]
           ,oc.[cpAddressID]
           ,oc.[cpAddress]
           ,oc.[cpPost]
           ,oc.[cpTel]
    FROM @CompanyCollection AS oc;

GO

2,建立相对应的数据类型

/****** Object:  UserDefinedTableType [dbo].[CompanyTableType]    Script Date: 07/04/2014 10:20:51 ******/
CREATE TYPE [dbo].[CompanyTableType] AS TABLE(
	[cpID] [int] NOT NULL,
	[cpHiID] [int] NULL,
	[cpBuySellTypeID] [nvarchar](200) NULL,
	[cpName] [nvarchar](200) NOT NULL,
	[cpShortName] [nvarchar](200) NULL,
	[cpIndustry] [nvarchar](300) NULL,
	[cpSell] [nvarchar](200) NULL,
	[cpBuy] [nvarchar](200) NULL,
	[cpAddressID] [int] NOT NULL,
	[cpAddress] [nvarchar](300) NULL,
	[cpPost] [nvarchar](100) NULL,
	[cpTel] [nvarchar](100) NULL,
)
GO

3,执行代码

        /// <summary>
        /// 单条添加,将datatable作为参数传进去,返回datatable的自增长编号(调用存储过程)
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        [WebMethod]
        public DataTable BuySell_Insert(DataTable dt, string token)
        {
            CheckLoginedS(token);
            if (dt.Rows.Count > 0 && dt.Rows != null)
            {
                tb_BuySell bs = new tb_BuySell();
                DataTable bt = bs.BuySell_Insert(dt);
                return bt;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 把datatable当参数,批量添加数据库中,返回datatable的新增行
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        public DataTable BuySell_Insert(DataTable tb)
        {
            DataTable dt = null;
            CMD.CommandText = "p_BuySell_Insert";
            CMD.CommandType = CommandType.StoredProcedure;
            CMD.Parameters.Clear();
            CMD.Parameters.AddWithValue("@BuySellCollection", tb);
            dt = DB.DataTable(CMD);
            return dt;
        }

  

时间: 2024-10-14 03:32:44

sql 通过存储过程和自定义类型批量新增数据的相关文章

mybatis 学习笔记(4) —— 批量新增数据

1.业务是从前台传入List<T> ,在controller层接受参数,并进行批量新增操作. 2.需要处理的细节 a) mybatis可以支持批量新增,注意数据表需要将主键设置成自增列. b) 由于spring mvc 无法将参数[{id:0,text:'a'},{id:1,text:'b'}] json字符串转换为对应的List<T>,因此需要自己手动封装一个方法用于将传入的字符串转换为泛型集合 3.具体实现步骤 a) js提交 需要注意的是必须在参数名上加引号 var dept

SQL中存储过程和自定义函数的区别(转载)

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程和自定义函数的区别

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程与自定义函数的区别

存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 优点 ①重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. ②提高性能.存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译.一般的SQL语句每

mybaits实现oracle批量新增数据,回填主键

项目有需求,百度了很久,反正他们说的方法,我都没成功,我也不知道是不是我写代码的姿势不正确,没办法只能自己想法子了 我们这个项目用到了通过Mapper,通用Mapper里通过OracleProvider 实现批量插入,好像可以通过KeySql注解可以自动生成主键, 生成的sql里有这个 <bind name="country_idGenIdBind" value="@[email protected](record, 'countryId', @[email prote

c#中对批量新增数据中使用SqlBulkCopy

private void AddBulkInsert(string tableName, DataTable dt) { string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["XzyConnstring"].ToString(); using (SqlConnection destinationConnection = new SqlConnection(connec

SqlBulkCopy 批量复制数据到数据表

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据 使用Datatable作为数据源的方式: 下面的代码使用到了ColumnMappings,因为目标表和数据源Datatable的结构不一致,需要这么一个映射来指定对应关系 public string SaveJHCData(LzShopBasicData[] datas)

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

转:存储过程和自定义函数的区别

首先来看一下存储过程和自定义函数的概念 一. 什么是存储过程? 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理. 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能. 存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数. 返回单个或多个结果集以及返回值. 可以出于任何使用SQL 语句的目的来使用存储过程