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

时间:2023-03-08 22:17:56
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;
}