存储过程传入一般的参数都很简单,今天要说一下存储过程传入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. 自己封装一个弹窗JS

    在我们平时的开发中,一定有很多地方需要用到弹窗提示功能.而系统自带的弹窗奇丑无比,而且我们不能自主控制.因此我们在开发过程中,自己封装一个弹窗JS方便我们使用. 代码demo如下: // JavaSc ...

  2. CSS 社区的解决方案,对比

    在众多解决方案中,没有绝对的优劣.还是要结合自己的场景来决定. 我们团队在使用过 scss 和 css modules 后,仍然又重新选择了使用 scss.css modules 虽然有效解决了样式冲 ...

  3. div遮盖,弹出层

    <html>     <head>     <title>LIGHTBOX EXAMPLE</title>     <meta charset=& ...

  4. sqlserver乱码问题解决

    * 如果是自己创建的数据库那么就应该在一开始就选择排序规则中的:Chinese_PRC_CI_AS 1.改变排序规则方法: 右击创建的数据库,属性→选项→排序规则中选择:Chinese_PRC_CI_ ...

  5. opencv::将两幅图像合并后,在同一个窗口显示;并将合并的图像流保存成视频文件

    /** * @file main-opencv.cpp * @date July 2014 * @brief An exemplative main file for the use of ViBe ...

  6. lambda函数的特性

    lambda表达式可以理解为一种抽象的函数实现方法,这种方式只有最基本的三个步骤:给与参数,表达式实现,返回结果.这种方式非常干净,减少了内存的使用,整个程序少了函数的污染,代码格式也会更为简练.但在 ...

  7. tomcat 绑定域名 防止恶意域名绑定

    http://aaronlong31.iteye.com/blog/1123260 今天公司一台服务器被很多恶意域名绑定了,电信的要我们赶紧处理,否则封IP. 服务器使用的是tomcat,上谷歌搜了很 ...

  8. Padavan老毛子固件:17CE插件集成

    Padavan老毛子固件:17CE插件集成 1.老毛子路由设置:系统管理-服务-启动SSH服务器     以下链接下载 "winscp" http://down.orsoon.co ...

  9. 云存储的未来:Scale Up还是Scale Out?

      云存储的几十年发展历程,其计算架构模型,也从Scale Up走向Scale Out.但是展望未来数字世界的海量需求,目前流行的模型还能够持续满足吗?本文通过对云存储历史的回顾,及对Scale Up ...

  10. 第23课 可变参数模板(4)_Optional和Lazy类的实现

    1. optional类的实现 (1)optional的功能 ①optional<T>的内部存储空间可能存储了T类型的值,也可能没有.只有当optional被T初始化之后,这个option ...