问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

sql,高手帮我解释下存储过程代码!有劳了!

发布网友 发布时间:2022-04-07 23:18

我来回答

3个回答

懂视网 时间:2022-04-08 03:40

存储过程   use EBuy go  --常用的系统存储过程  sp_addmessage  --将新的用户定义错误消息存储在SQL Server数据库实例中  sp_helptext  --显示用户定义的规则、默认值、存储过程、函数、视图等对象的实际文本  sp_xml_preparedocument  --读取作为输入提供的XML文本,然后使用MSXML分析器对其进行分析,并提供分析后的文档供使用  sp_helpdb ‘EBuy‘  --查看指定数据库的信息 sp_databases  --列出服务器上的所有数据库  sp_server_info  --列出服务器信息,如字符集、版本和排列顺序等 sp_stored_procedures  --列出当前环境中的所有存储过程 sp_configure  --修改SQL Server全局配置选项 sp_adduser --向当前数据库中添加新的用户  sp_addrole  --在当前数据库中创建新的数据库角色    --用户自定义存储过程 create table users(  id int primary key,  name varchar(20) not null,   pwd varchar(20) not null )  insert into users values(1,‘zhangsan‘,‘zhang01‘) go   create procedure addUser  --创建存储过程(procedure可以简写为proc)  @id int,  @name varchar(20),  @pwd varchar(20) as   begin   insert into users(id,name,pwd) values(@id,@name,@pwd)  end   exec addUser 2,‘lisi‘,‘lisi01‘  --执行存储过程(实参传递的顺序和所对应的形参顺序必须一致)   exec addUser @name=‘wangwu‘,@pwd=‘wang01‘,@id=3  --执行存储过程,这种方式顺序可以不一致   declare @v_id int,@v_name varchar(20),@v_pwd varchar(20)  set @v_id=5  set @v_name=‘zhaoliu2‘  set @v_pwd=‘zhao022‘  exec addUser @v_id,@v_name,@v_pwd  --执行存储过程,调用存储过程并传递变量参数(顺序必须与定义变量的顺序一致)   select * from users   

 

 

 

 

 

   2  --制定默认值 use Study  if exists(select * from sys.all_objects where name=‘increaseCredit‘ and type=‘P‘)  drop procedure increaseCredit go   create proc increaseCredit  @stuName char(6)=null,  --指定null为默认值  @credit int = 3  --制定整数值3为默认值 as  begin   if @stuName=null    begin     print ‘没有指定学号,更新无法完成‘     return    end  update student set credit=credit+@credit where stuName=@stuName  end   exec increaseCredit ‘程琳‘,5  --提供所有参数  exec increaseCredit ‘程琳‘  --提供部分参数,则第二个参数使用默认值3    --指定参数方向  if exists(select name from sys.all_objects where name=‘avgCreditForMajor‘ and type=‘P‘)  drop proc avgCreditForMajor   create proc avgCreditForMajor  @majorId int,  --输入参数  @avg decimal(4,1) output  --输出参数 as  select @avg=avg(credit) from student where majorId=@majorId go   declare @avgCredit decimal(4,1)    exec avgCreditForMajor 1,@avgCredit output  --将输出的返回值保存在@avgCredit变量中,注意输出参数也必须指定output关键字  print(‘专业平均学分:‘+cast(@avgCredit as varchar))  --显示储存过程的返回值 go   --使用return语句 use EBuy  if exists(select name from sys.all_objects where name=‘checkCity‘ and type=‘P‘)  drop proc avgCreditForMajor   create proc checkCity  @cusid varchar(20) as  if(select address from customer where cusId=@cusid) like ‘%上海%‘   return 1  else if(select address from customer where cusId=@cusid) not like ‘%上海%‘ 

 

 

 

 

   3    return 2  else    return 3   declare @ret_status int  exec @ret_status=checkCity ‘1001‘  --客户住在上海 select @ret_status as ‘返回状态‘   declare @ret_status int  exec @ret_status=checkCity ‘1004‘  --客户不住在上海 select @ret_status as ‘返回状态‘   declare @ret_status int  exec @ret_status=checkCity ‘13204‘  --客户不存在的情况 select @ret_status as ‘返回状态‘   --事物和错误处理 create proc procTest as  declare @num int  select @num=9  begin try   while @num>0   begin    print convert(varchar,sqrt(@num))    select @num=@num-1    if @num=5     raiserror(‘基数已小于6‘,16,1)   end  end try  begin catch   print ‘放生错误的是:‘+convert(varchar,error_procedure())   print ‘错误编号:‘+convert(varchar,error_number())   print ‘错误描述:‘+convert(varchar,error_message())   print ‘错误级别:‘+convert(varchar,error_severity())   print ‘错误位于:‘+convert(varchar,error_line())   print ‘错误状态:‘+convert(varchar,error_state())  end catch go   exec procTest  --执行存储过程     --存储过程中的事务 use EBuy  create table account(  accId int,  type varchar(10),  balance decimal(10,2) ) 

 

 

 

 

   4  insert into account values(33,‘savings‘,3000) insert into account values(33,‘checking‘,1500)   if exists(select name from sys.all_objects where name=‘savingsToChecking‘ and type=‘P‘)  drop proc savingsToChecking go  create proc savingsToChecking  @accid int,  @num decimal(10,2) as  declare @bal decimal(10,2)  begin try   select @bal=balance from account where accId=@accid and type=‘savings‘   if @num>@bal    return 1   begin tran    update account set balance=balance-@num where accId=@accid and type=‘savings‘    update account set balance=balance+@num where accId=@accid and type=‘checking‘   commit tran   return 0  end try  begin catch   rollback tran   return 2  end catch go   declare @retCode int begin  exec @retCode=savingsToChecking 33,1500  if @retCode=0   print ‘转账成功‘  else if @retCode=1   print ‘转账金额大于账面余额,转账失败‘  else    print ‘数据库发生错误,转账失败‘ end    --存储过程的查看、修改和删除  sp_helptext ‘savingsToChecking‘  --查看存储过程   alter proc savingsToChecking  @accid int,  --此处可以修改参数的定义  @num decimal(10,2)   drop proc savingsToChecking  --删除存储过程    --重新编译存储过程 --1 

 

 

 

 

   5  sp_recompile savingsToChecking  --2  create proc savingsToChecking  @accid int,  @num decimal(10,2)  with recompile   --创建存储过程的时候指定 as ......   --3  exec savingsToChecking 33,1500 with recompile

SQL存储过程使用参考代码

标签:

热心网友 时间:2022-04-08 00:48

加上 N 代表存入数据库时以 Unicode 格式存储。
N'string' 表示string是个Unicode字符串

Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。

Unicode 字符串常量支持增强的排序规则。

exec(@str2)表示 执行这个参数所代表的语句

print 是显示这个@str2所代表的值
应该是调试的时候用的 没有实际效果
@aa 是在这里定义的
exec sp_executesql @str, N'@aa int output',@wareCount output
因为 语句是要执行才会验证的 这条语句执行@str 所以@aa是在这里定义了

热心网友 时间:2022-04-08 02:06

1、 exec sp_executesql @str, N'@aa int output',@wareCount output --N是什么意思?
2、+convert(varchar(5),@pageCount)+'*'+convert(varchar(5),@nowPage)+convert(varchar(1000),@sort);--* 号是什么意思?
3、exec(@str2);--这句是什么意思?
------------------
答:
1、用sp_executesql 必须要Unicode字符,所以要加上N''。
2、*是乘积,意思是取row的最后记录 以上意思是:(页-1)*页记录+1 between 页*页记录
3、 exec(@str2)--这是执行字符串语句

以上希望对楼主有所帮助。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
网线威海不一个区能挪用吗 侵挪的读音侵挪的读音是什么 我被网络诈骗了,但是钱是我用的客户的,这样算不算诈骗和挪用罪? 坐支挪用什么意思 支挪的解释 WIB764位家庭版系安装的IE9浏览器打开很卡求原因 win7 64位家庭版 IE9报错 倩女幽魂结拜突破在那个地方 倩女幽魂怎么转职转职了等级变不 肉眼如何找北斗七星肉眼怎样找北斗七星 怎样炒芹菜才好吃视频 芹菜要怎么做才能更好吃呢? 芹菜怎么做好吃视频 哪位大神可以帮我算下cad2020激活码啊申请号: D6UX RC6H 6SRE R0P6 AAGQ NK5T KZ74 JHPZ。万分感谢啊! 成长路上我有作文 hsre意思 成长路上作文800字三三式 相对风暴环境螺旋度sreh怎么计算 安的UDH ruvEsomSrE e r下SoeT或在xnfni装lRDAi o 成长路上有___真好 作文怎么写? 想象 参观UFO 在我成长的道路上作文 (mtz11aomx0h)【k_k】 成长路上乐事多作文 有ao.msreh电热水器这个牌子吗 《成长路上有星光》作文(自己写的亲!!!) 成长路上精彩不断的作文 成长路上的事的作文 作文 成长路上有朋友相伴 成长路上作文400字 什么叫供给侧 人民日报:供给侧,怎么看 微信小视频和表情包极其消耗流量,怎样拒收小视频和表情包 iphone11在合肥可以刷公交卡吗 qqsvip1可以用哪些气泡? QQVIP气泡黑色的爱疯x在哪。到处看都没看到只能点别人用的。 充QQvip是气泡和头像任选吗? 逗咪兼职靠谱吗- 问一问 上海逗咪广告有限公司怎么样? 求把送别简谱翻译成汉字,就像*啦*逗啦逗*这样翻译。。。。高分 小猫的作文360 电饭锅的表面的一层灰色涂层会不会对身体有害? 手机有没有什么软件搬家的软件? 什麽是静电? 手机软件搬家下载 静电电压指的是什么? 静电是什么意思 ViVO丫55与丫55L哪个手机更好? 什么叫静电 vivo y55的手机壳vivo y55l能用吗
  • 焦点

最新推荐

猜你喜欢

热门推荐