存储过程传入一般的参数都很简单,今天要说一下存储过程传入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 ------删除游标

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

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

    Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2)  as  ...

  2. SqlServer存储过程传入Table参数

    今天是周日,刚好有空闲时间整理一下这些天工作业务中遇到的问题. 有时候我们有这样一个需求,就是在后台中传过来一个IList<类>的泛型集合数据,该集合是某个类的实例集合体,然后将该集合中的 ...

  3. C#存储过程 传入参数 传出参数 结果集

    作者:卞功鑫 转载请保留:http://www.cnblogs.com/BinBinGo/p/6400928.html //1 连接字符串 string connectionString = &quo ...

  4. C# 调用存储过程传入表变量作为参数

    首先在SQLServer定义一个自定义表类型: USE [ABC] GO CREATE TYPE [ABC].[MyCustomType] AS TABLE( ) NOT NULL, ) NULL, ...

  5. clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  6. 存储过程 传 datatable

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

  7. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

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

    存储过程p_OperatorDetails,有四个参数@sDatetime,@eDatetime,@operatorNo,@transdesc.其中@operatorNo和@transdesc为两个可 ...

  9. SQL 存储过程 传入数组参数

    今天在做统计数据的时候,传入数组导致数据不显示.解决方式和大家分享一下: --参数@CompanyName='北京,天津,上海' DECLARE @PointerPrev int     DECLAR ...

随机推荐

  1. crm --- 1.admin , 展示列表 和 分页

    一.admin (创建超级用户) 1.注册: 1.创建一个超级管理员,使用如下命令: python manage.py createsuperuser 2.输入打算使用的登录名: username:m ...

  2. nginx配置http强制跳转https

    nginx配置http强制跳转https 网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置. 一.采用nginx的rewrite方法 ...

  3. 【java】模板方法设计模式

    模板方法:在定义功能时,功能一部分是确认的,另一部分是不确认的或者后续会变化的.这时可以把不确定的部分暴露出去,定义成抽象类或者接口,由子类来完成. abstract class GetDuring ...

  4. Excel技巧--做一去重复的数据下拉列表

    当我们有一数据列表(内含重复数据),将该数据做成如下图的下拉列表: 可以这样做: 1.选中该标题行,按ctrl+shift+下方向键,将该列有数据的区域选中: 2.点击“数据”—>删除重复项: ...

  5. [蓝桥杯]ALGO-186.算法训练_P0501

    输入两个无符号整数x, y, 用位操作实现无符号整数的乘法运算.不用考虑整数的溢出. 输入: 输出: 题目描述 代码如下: #include <stdio.h> #include < ...

  6. 解决双击excel文件打开多个excel.exe进程的问题

    解决双击excel文件打开多个excel.exe进程的问题有些时候,双击两个excel文件,会打开多个excel进程,不同进程之间不能复制粘贴公式,只能粘贴数值,很不方便.怎么样双击多个excel文件 ...

  7. makefile或shell中的一些变量

    总是记不住,作个笔记 $@ 所有目标文件 $< 第一个依赖文件的名称 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚 $^ 所有的依赖文件,以空格分开,不包含重复的依 ...

  8. 流媒体压力测试rtmp&hls(含推流和拉流)

    http://blog.csdn.net/sinat_34194127/article/details/50816045 [root@localhost ~]# yum install git unz ...

  9. mysqli用户权限操作

    此操作指令在 mysql 的数据库中 所以要 use mysql 查询mysqli中所有用户的权限 select host,user form user;  添加用户 grant all privil ...

  10. systemverilog的高亮显示

    1. 在_vimrc文件末尾添加: syntax on "确定vim打开语法高亮 filetype on "打开文件类型检测 filetype plugin on "为特 ...