使用DataTable作为存储过程的参数
最近工作中写了几个存储过程,需要向存 储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分存到一个List中,再转化为字符串传给存储过程,很是麻烦。今天看了下SQL Server 2008的新特性,发现有表变量的使用,及其将DataTable作为参数的用法,就尝试了一下,简单谈谈心得。
一、测试环境
1、Windows Server 2008 R2 DataCenter
2、Visual Studio 2008 Team System With SP1
3、SQL Server 2008 Enterprise Edition With SP1
由于是SQL Server 2008新特性,所以只能用2008。
二、测试概述
测试项目很简单,就是添加新用户
三、准备数据
1、建立数据库、表、类型、存储过程
代码
1 IF NOT EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Users') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) 2 BEGIN 3 CREATE TABLE dbo.Users 4 ( 5 UserID INT IDENTITY(-1, -1) NOT NULL, 6 UserName VARCHAR(20) NOT NULL, 7 UserPass VARCHAR(20) NOT NULL, 8 Sex BIT NULL, 9 Age SMALLINT NULL, 10 CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID) 11 ) 12 END 13 IF NOT EXISTS(SELECT * FROM sys.table_types WHERE name = 'UserTable' AND is_user_defined = 1) 14 BEGIN 15 CREATE TYPE UserTable AS TABLE 16 ( 17 UserName VARCHAR(20) NOT NULL, 18 UserPass VARCHAR(20) NOT NULL, 19 Sex BIT NULL, 20 Age SMALLINT NULL 21 ) 22 END 23 GO 24 代码 1 IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('sp_InsertSingleUser') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) 2 BEGIN 3 DROP PROCEDURE dbo.sp_InsertSingleUser 4 END 5 GO 6 CREATE PROCEDURE dbo.sp_InsertSingleUser 7 ( 8 @User UserTable READONLY 9 ) 10 AS 11 12 SET XACT_ABORT ON 13 BEGIN TRANSACTION 14 15 INSERT INTO dbo.Users(UserName, UserPass, Sex, Age) 16 SELECT UserName, UserPass, Sex, Age FROM @User 17 18 COMMIT TRANSACTION 19 SET XACT_ABORT OFF 20 GO |
前台搭建好表单,后台主要是一个函数:
代码
1 public void fnInsertSingleUser(DataTable v_dt) 2 { 3 try 4 { 5 SqlConnection cn = new SqlConnection(CONN); 6 SqlCommand cmd = cn.CreateCommand(); 7 cmd.CommandType = CommandType.StoredProcedure; 8 cmd.CommandText = @"sp_InsertSingleUser"; 9 SqlParameter p = cmd.Parameters.AddWithValue("@User", v_dt); 10 11 DataSet ds = new DataSet(); 12 SqlDataAdapter da = new SqlDataAdapter(cmd); 13 da.Fill(ds); 14 } 15 catch (Exception ex) 16 { 17 throw ex; 18 } 19 } |
点击【添加】按钮时调用存储过程。测试是完成了,也很简单,传递一个DataTable做参数确实很方便吧,能够轻松完成原先需要很多编码的工作。关于 表变量还是有些道道的,如创建时判断其是否存在的语句,删除表变量前需要先删除引用表变量的存储过程等。一般开发我大多会选择用临时表,处理起来比较方 便,表变量可以作为存储过程参数确实是一个独特的优势,希望在SQL Server的未来版本中能够继续增强对表变量和临时表的支持,尤其是早日支持临时表调试。
转载于:https://www.cnblogs.com/zhangchenliang/archive/2010/01/29/1659533.html
使用DataTable作为存储过程的参数相关推荐
- oracle存过传参,oracle 存储过程 传参数,如果是希望传参值也被利用起来,存储过程里面虽有IN,但OUT必不可少。...
int point = 0; string MYSTATUS = ""; int kkk = 0; //存储过程的参数声明 OracleParameter[] parameters ...
- SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...
- pb 执行存储过程带参数_数据库存储过程
1. 存储过程的类型: (1) 用户自定义存储过程 自定义存储过程即用户使用T_SQL语句编写的.为了实现某一特定业务需求,在用户数据库中编写的T_SQL语句集合,自定义存储过程可以接受输入参数.向客 ...
- 存储过程IN参数疑难问题解决方法【真正解决】
首先,我不会令大家失望,真想解决问题的认真往下看 很久很久以前,我在使用Server的存储过程时,遇到一个问题,就是,IN(@ids)这样的语句执行不了,其实是可以执行的,很多人提出的解决方案是,EX ...
- 存储过程传入参数与表字段名相同时产生的问题
记得之前写过一篇关于存储过程删除语句的博客,其实就是这个问题,今天又遇到了,问题是我居然搞了好久都没想起来. 下面看代码 BEGIN/* 更新采集任务状态 */DECLARE v_id BIGINT; ...
- 获取SQL SERVER某个数据库中所有存储过程的参数
2019独角兽企业重金招聘Python工程师标准>>> 一.获取指定数据库中所有存储过程的参数的方法 SELECT sp.object_Id as FunctionId, sp.na ...
- sql 解析字符串添加到临时表中 sql存储过程in 参数输入
sql 解析字符串添加到临时表中 sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表 FROM dbo.Func_SplitOneCol ...
- 存储过程+调用存储过程+无/带参的存储过程+in参数+out参数+int out参数+为参数设置默认值...
存储过程 1存储过程是一组为了完成特定功能的SQL语句集 2存储过程编译后存储在数据库中 3执行存储过程比执行存储过程封装的SQl语句集更有效率 4不能指定declare关键字 5: OUT 和 IN ...
- oracle存储过程传整数,oracle存储过程传参数
场景:Oracle存储过程传参数有关问题 Oracle存储过程传参数问题 在存储过程当中传参数的时候可以使用 IF SDATE IS NOT NULL OR EDATE IS NOT NULL THE ...
最新文章
- 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
- vaspkit使用_VASPKIT校正气体分子自由能
- python api调用展示_Python百视api调用示例
- redis的学习资源
- JMeter 教程汇总链接
- 折纸 瓦力机器人_折纸图解金鱼筷子架
- 解决vue页面刷新或者后退参数丢失的问题
- Collectors.averagingDouble()
- linux配置ssh免密钥登录
- Python成长之路第一篇(1)__字符串初识
- java xml 多层解析_多级xml解析方案
- k8s 自定义dns_配置k8s dns
- 云服务器安全组设置后,依然无法访问端口(已解决)
- Python期末考试
- MVC中集成Hangfire定时任务
- CHIP-seq流程学习笔记(13)-ATAC_seq 数据加工处理
- IM方案技术调研报告
- 业务系统(HANA/SAP/OA/ERP/OA)
- MIMIC IV数据库安装(二)
- bouc wen matlab,基于Matlab磁流变阻尼器Bouc-Wen模型的参数识别
热门文章
- python输出数字方阵_在python里输出数字方阵
- sql server numeric 可存几位小数_想成为优秀SQL高手?你就差这些细节
- 只能计算机论文,谈计算机及人工智能技术发展-人工智能论文-计算机论文.docx...
- python 工资管理软件_4_python之路之模拟工资管理系统
- 依据imu姿态角计算z轴倾角_1. 姿态的表示方法
- c语言数组中两元素交换,如可交换两个数组中的元素?
- HP Z840 工作站配sSAS Raid 安装 Ubuntu 16.04 系统
- Python爬虫学习二
- 创建oracle数据库表空间并分配用户
- Bootstrap--圆角图片`圆形图