SqlServer高级存储过程
--------------存储过程------------------------
--T-sql的执行逻辑
--1.语法分析
--2.将目标sql进行编译
--3.开始执行
--如果是存储过程的话,则直接执行第3步
--存储过程的优势
--1.执行速度快,效率高
--2.模块化编程
--3.降低网络流量
--4.安全处理
--存储过程分为两种:系统存储过程、用户自定义存储过程
--系统存储过程以sp_或xp_开头,如:sp_helptext、sp_databases、sp_columns、sp_tables
--查询系统存储过程
--因为系统存储过程都保存在master数据库中,所以查询系统存储过程一定要先打开mastr数据库
use master
go
select * from sys.sysobjects where name like 'sp_%' or name like 'xp_%'
go
--虽然系统存储过程都保存在master数据库中
--但是,我们可以在各个数据库中调用系统存储过程
use netbar
go
--查询当前数据库(netbar)中所有的数据表
execute sp_tables
go
--查询数据表tblcardinfo所有的列信息
exec sp_columns 'TblCardInfo'
go
------------------如何创建用户自定义存储过程---------------------------------------
--创建不带参数的存储过程
create procedure pro_ComputerUseState
as
begin
select * from tblcomputer;
end
--调用不带参数的存储过程
exec pro_ComputerUseState;
go
--调用系统存储过程sp_helptext来查看我们刚刚定义的存储过程的文本信息
exec sp_helptext 'pro_ComputerUseState';
go
--如何修改存储过程
alter proc pro_ComputerUseState
as
begin
select intComputerId,
'intInUse'=case intInuse
when 0 then '未使用'
when 1 then '以使用'
end,
chvComputerName,
chvDescription
from tblcomputer
end
--如何创建有输入参数的存储过程
create procedure pro_getComputerState
@state int--参数默认为输入参数
as
begin
select intComputerId,
'intInUse'=case intInuse
when 0 then '未使用'
when 1 then '以使用'
end,
chvComputerName,
chvDescription
from tblcomputer
where intInuse=@state
end
go
--调用带有输入参数的存储过程的两种方式
--1.
exec pro_getComputerState 0;
go
--2.
declare @state int;
set @state = 1;
exec pro_getComputerState @state;
go
--如何创建带有输入参数默认值的存储过程
alter procedure pro_getComputerState
@state int=0
as
begin
select intComputerId,
'intInUse'=case intInuse
when 0 then '未使用'
when 1 then '以使用'
end,
chvComputerName,
chvDescription
from tblcomputer
where intInuse=@state
end
go
--调用带有输入参数默认值的存储过程的两种方式
--1.
execute pro_getComputerState;
go
--2.
execute pro_getComputerState default;
go
--创建带有输入参数和输出参数的存储过程
--参数之间用逗号,隔开,最后一个参数后无需逗号
create proc pro_getComputerStateById
@intComputerId int,
@state int output
as
begin
select @state = intInUse
from tblcomputer
where intcomputerid=@intComputerId
end
--调用带输出参数的存储过程
--调用时一定要在输出参数后加关键字output
declare @state int, @computerId int;
set @computerId = 7;
exec pro_getComputerStateById @computerId,@state output
select @state;
--根据电脑id删除电脑
--存储过程内为删除操作
create proc pro_deleteComputerById
@computerId int
as
begin
delete from tblcomputer where intcomputerId=@computerId;
end
exec pro_deletecomputerbyid 9
--创建存储过程:当目标id计算机不存在时返回-1;删除成功返回1;删除失败返回0
--在存储过程内部可以使用return关键字返回指定的数值,且只能返回数值
alter proc pro_deleteComputerById
@computerId int
as
begin
if not exists(select * from tblcomputer where intcomputerId = @computerId)
return -1;
delete from tblcomputer where intcomputerId=@computerId;
if @@rowcount > 0
return 1;
return 0;
end
--调用带返回值的存储过程
declare @result int;
exec @result = pro_deleteComputerById 9
select @result;
go
--1.如何创建不含参数的存储过程
--2.如何创建带有输入参数的存储过程
--3.如何创建既有输入参数又有输出参数的存储过程
--4.如何创建带有返回值的存储过程
--5.如何调用上述类型的存储过程
--6.存储过程能不能既有输入参数、输出参数、返回值???肯定可以。
-- 存储过程永远都会有返回值,默认的返回值为0
--异常处理
--raiserror:3个参数
create procedure pro_deleteCardInfoById
@intCardId int
as
begin
if not exists(select * from TblCardInfo where intCardId = @intCardId)
begin
raiserror('指定的卡号不存在', 16, 1);
return -1;
end
delete from TblCardInfo where intCardId=@intCardId;
if @@rowcount > 0
return 1;
return 0;
end
exec pro_deleteCardInfoById 6
select @@error;
go
declare @text nvarchar(1000);
set @text = 'select * from tblcardInfo';
exec(@text);
go
--如何执行sql文本字符串
create proc pro_excutesql
@sqltext nvarchar(4000)
as
begin
exec(@sqltext);
end
exec pro_excutesql 'update tblcomputer set chvdescription=''xxx'' where intcomputerid = 1'
select * from tblcardinfo;
select * from tblcomputer
转载于:https://www.cnblogs.com/changjiang/archive/2012/07/23/2605289.html
SqlServer高级存储过程相关推荐
- 把sqlserver中存储过程改写到oracle中
一同学叫我帮忙改存储过程sqlserver----->oralce数据中: sqlserver中存储过程: SET QUOTED_IDENTIFIER ON GO SET ANSI_N ...
- SqlServer中存储过程中将Exec的执行结果赋值给变量输出
原文 SqlServer中存储过程中将Exec的执行结果赋值给变量输出 背景: 遇到这样一种情况:动态向存储过程中传入表名和表的某些属性(这里用到的是主键ID),然后利用这两个变量查出一条数据的某些字 ...
- MySQL 高级 - 存储过程 - 语法 - case结构
MySQL 高级 - 存储过程 - 语法 - case结构 -- 给定一个月份, 然后计算出所在的季度 create procedure pro_test7(mon int) begindeclare ...
- MySQL 高级 - 存储过程 - 语法 - if判断 || 传递参数 (IN - 输入 OUT-输出)
MySQL 高级 - 存储过程 - 语法 - if判断 传递参数
- SQLServer 的存储过程与java交互
一. 存储过程简介 Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量.条件执行和其他强大的编程 ...
- 为什么sqlserver创建存储过程成功,却找不到这个存储过程呢
1.为什么sqlserver创建存储过程成功,却找不到这个存储过程呢? 需要点击工具上,创建存储过程,在那个里面去写存储过程,然后再刷新存储过程就会出现了 注意:如果是在新建查询上面,直接写sql创建 ...
- sqlserver 创建存储过程及基本语法
本文记录sqlserver 创建存储过程及基本语法的讲解,附上作者实现功能的实例 背景:作者的task是需要两个数据库之间进行数据迁移,本可以用java程序来实现,后面觉得可以学习下存储过程,故采用这 ...
- Sqlserver 高级篇 聚集索引原理
原理 Sqlserver 高级篇 非聚集索引原理 说完非聚集索引 接着说 聚集索引 聚集索引就是把数据按照 用户设置排好顺序 与非聚集索引不同 非聚集索引不会动数据页 只会新增一个索引表 聚集索引直 ...
- SqlServer高级特性--存储过程
需求: 用户需要提交加密数据,提交之后需要解密还原,还原有两种结果:成功和失败! 100个用户,之前7天,判断是否有提交数据,如果有提交有数据,判断是否解密成功(分别存在两个表中).如果没有提交,显示 ...
最新文章
- docker 安装 solr搜索引擎
- 利用jmeter向数据库批量导入数据
- 人人都是产品经理 2
- 各种排序实现以及稳定性分析
- 多个表关联的查询语句
- 设计模式 分类和原则
- python绘制概率密度曲线_[python常用图件绘制#04]核密度曲线图(峰值点显示)
- 如何轻松将上亿的数据玩弄于股掌之中?
- 考教育统计与测量可以带哪种计算机,《教育统计与测量》练习题库及答案
- Spring 应用开发框架 Spring Boot 2.3.0 最新版本发布
- kafka的topic操作入门
- 《平潭史话》之平潭轮渡
- 技术变化太快,程序员咋办? 从Adobe Flash想到那些年我幸运躲过的MFC和塞班
- 微信支付被盗刷?微信:我们全赔!支付宝:我们秒赔!
- 论文翻译:2019_Bandwidth Extension On Raw Audio Via Generative Adversarial Networks
- 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...
- 量化交易之单因子策略
- Bullet 物理引擎 简析[1]
- 转载的一篇关于矢量字体的文章
- 将代码上传到GitHub上
热门文章
- css设置div水平居中
- 没有web.xml如何使用 Maven打war包?
- ICPC2020小米网络选拔赛第一场复盘
- 家装计算器php,家装计算器
- epplus word html,EPPlus简介
- 程序员的职业规划_大学毕业进入职场,程序员如何进行合理的互联网职业规划?...
- python中修饰器的优点和作用_Python入门基础教程之装饰器
- java servlet类_[Java教程]与Servlet相关的类
- hdu 6351 Beautiful Now
- iis php日志查看工具,教你如何查看IIS日志