存储过程传入datatable

存储过程传入一般的参数都很简单,今天要说一下存储过程传入datatable 类型

首先要自定义一个 表类型

CREATE TYPE [dbo].[servicedatableType] AS TABLE
    (
    category int  NULL,
    class int  NULL,
    packname nvarchar(1000)  NULL,
    packid int  NULL ,
    serviceid int  null,
    servicename nvarchar(500)  null,
    serviceprice decimal(18,2) null,
    servicecomment  nvarchar(4000)  null,
    servicecategory int  null,
    sstate int null,
    iscarray int null
    )

GO

我们自定义了表类型以后 在存储过程中就可以 直接用了

@servicollection servicedatableType readonly

这里我们定义了一个 表结构的字段, 在 存储过程调用的时候直接传入 datatable 就行了。

new SqlParameter("@servicollection",dt)

这里再 介绍一个我自己写的例子, 需求是将传入的 databke 遍历  验证是否存在, 不存在则执行写入,此处遍历datable时 用了 游标

create procedure  pr_InsertPackinfoandService(
@category int,
@packid int,
@class int,
@packname nvarchar(500),
@price decimal(18,2),
@comment nvarchar(4000),
@status int,
@chargestatus int,
@conecssionprice decimal(18,2),
@renewprice decimal(18,2),
@statrtime datetime,
@endtime datetime,
@renewyers int,
@renewtimes int,
@buytimes int,
@iscarry int,
@servicollection servicedatableType readonly
)
as
declare @isCount int
declare @pspackedid int
declare @pscategory int
declare @psclass int
declare @pkname nvarchar(100)
declare @serviceid nvarchar(100)
declare @servicename nvarchar(300)
declare @pscomment nvarchar(200)
declare @servicecate int
declare @serviceprice decimal(18,2)
declare @psstatus int
declare @psiscarry int
begin

 set @isCount=(select COUNT(*) from t_packages_info where pi_category=@category and pi_class=@class  and pi_packageid=@packid  )
 if(@isCount=0) --判断套餐 是否存在
 begin
 --执行添加操作
 insert into t_packages_info (pi_category,pi_class,pi_packageid,pi_packname,pi_price,pi_comment,pi_status,pi_chargestatus,pi_ConcessionalPrice,pi_RenewPrice,pi_AvailableEndTime,pi_AvailableStartTime,pi_RenewYears,pi_RenewTimes,pi_BuyTimes,pi_IsCarray)
 values(@category,@class,@packid,@packname,@price,@comment,@status,@chargestatus,@conecssionprice,@renewprice,@endtime,@statrtime,@renewyers,@renewtimes,@buytimes,@iscarry)

 --执行添加服务

 declare cur_serList cursor scroll For
    select category, class,packname,packid,servicename,serviceprice,servicecomment,servicecategory,sstate,iscarray from @servicollection
    fetch first from cur_serList into  @pscategory,@psclass,@pkname ,@serviceid,@servicename,@serviceprice,@pscomment,@servicecate,@psstatus,@psiscarry
   While @@FETCH_STATUS=0
   if((select COUNT(*) from t_package_service where ps_serviceid=@serviceid and pi_class=@psclass and pi_category=@pscategory )=0)
   begin
   --执行添加操作
    insert into t_package_service(pi_category,pi_packageid,pi_class,pi_packname,ps_serviceid,ps_servicename,ps_serviceprice,ps_comment,ps_ServiceCategory,ps_State,ps_IsCarray)
    values(@pscategory,@pspackedid, @psclass,@pkname,@serviceid,@servicename,@serviceprice,@pscomment,@servicecate,@psstatus,@psiscarry)
   end

   fetch next from cur_serList into @pscategory,@psclass,@pkname ,@serviceid,@servicename,@serviceprice,@pscomment,@servicecate,@psstatus,@psiscarry
 end
end
Close cur_serList;----关闭游标
deallocate cur_serList ------删除游标
时间: 2024-10-28 14:16:08

存储过程传入datatable的相关文章

SqlServer存储过程传入Table参数

今天是周日,刚好有空闲时间整理一下这些天工作业务中遇到的问题. 有时候我们有这样一个需求,就是在后台中传过来一个IList<类>的泛型集合数据,该集合是某个类的实例集合体,然后将该集合中的实例的数据一个个地插入到数据库或者更新到数据库中去.一开始我想到的方法是拼接字符串,然后通过存储过程对接收到的字符串进行截取,再一个个地插入或者更新到数据库中去,这是最原始的方法,不过过程会比较复杂,想到这就头疼.后来查找发现说SqlServer2008中为存储过程添加了一个新特性,可以传递表类型的参数,既然

Oracle中存储过程传入表名学习

Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2) as --定义变量存放动态的SQL语句 dynamic_drop_sql varchar2(500); begin dynamic_drop_sql :=  'DELETE  FROM ' || i_tableName ; --执行动态SQL语句 execute immediate dynamic_drop

存储过程 传 datatable

首先  定义 datatable 然后把要传的数据放到table里面 调用 存储过程   传递参数

C#中存储过程和DataTable的应用

存储过程p_OperatorDetails,有四个参数@sDatetime,@eDatetime,@operatorNo,@transdesc.其中@operatorNo和@transdesc为两个可选参数,通过这四个参数如何从存储过程里面提取自己想要的特定数据字段,方法各异,这里我用的是用DataTable的相关操作. 首先打开数据库链接 string strCon = System.Configuration.ConfigurationManager.AppSettings["Connect

存储过程传入表参数

--- 1.创建表类型create type LocationTableType as Table(sonum varchar(20),itemNum varchar(20),itemQty int ,soarea varchar(10)) ---2.创建一个存储过程以表值参数作为输入alter proc usp_TestProcWithTable    @tb  LocationTableType READONLY   ----表值参数 "@tb" 为只读,无法修改as DECLAR

ORACLE ADF11g:存储过程传入数据库对象

图解: 完

ORACLE ADF11g:AM 存储过程传入数据库对象数组

图解: 完

sql存储过程传入ID集合,和临时表的使用

方式1: Declare @SQL NVarChar(max) set @SQL='select *from Loanee as a  ApplicationID in ('[email protected]+')' Create table #t2 (ID int , OutCashAccountNo nvarchar(50), OutName nvarchar(50), InCashAccountNo nvarchar(50), InName nvarchar(50), Amount dec

C# 将Datatable作为参数,传入存储过程

//创建一个静态方法 public static DataSet fnInsertSingleUser(DataTable v_dt, params string[] param) { try { SqlConnection cn = new SqlConnection(connectionString);//connertionString链接数据库字符串 SqlCommand cmd = cn.CreateCommand(); cmd.CommandType = CommandType.St