设为首页 收藏本站
查看: 1164|回复: 0

[经验分享] SQL Server 2000 存储过程练习

[复制链接]

尚未签到

发表于 2016-11-2 08:17:19 | 显示全部楼层 |阅读模式
     
  
  存储过程的创建和执行:
  CREATE PROCEDURE [insert_members_1]
(@id_1 [tinyint],
@name_2 [char](10),
@password_3 [varchar](50),
@sex_4 [char](6),
@birth_5 [datetime],
@salary_7 [money])
  AS INSERT INTO [myguest].[dbo].[members]
( [id],
[name],
[password],
[sex],
[birth],
[salary])

VALUES
( @id_1,
@name_2,
@password_3,
@sex_4,
@birth_5,
@salary_7)
GO

  execute insert_members_1 1,'bitan','aaaaaaa','male','19200202',$3200.20
  
  结果:
  表members将新增一条记录。
  
  
  
  
  存储过程的另一个例子:
  
  /*create procedure update_members_id
(
@id int,
@name varchar(20)
)
as update members set name=@name where id=@id */
execute update_members_id 3,'susan';
select * from members;
  
  结果:
  3susan aaaaamale 1979-01-09 00:00:00.0000x00000000000001A95000.0000

  
  
  存储过程的创建和执行:
  CREATE PROCEDURE [insert_members_1]
(@id_1 [tinyint],
@name_2 [char](10),
@password_3 [varchar](50),
@sex_4 [char](6),
@birth_5 [datetime],
@salary_7 [money])
  AS INSERT INTO [myguest].[dbo].[members]
( [id],
[name],
[password],
[sex],
[birth],
[salary])

VALUES
( @id_1,
@name_2,
@password_3,
@sex_4,
@birth_5,
@salary_7)
GO

  execute insert_members_1 1,'bitan','aaaaaaa','male','19200202',$3200.20
  
  结果:
  表members将新增一条记录。
  
  
  
  
  存储过程的另一个例子:
  
  /*create procedure update_members_id
(
@id int,
@name varchar(20)
)
as update members set name=@name where id=@id */
execute update_members_id 3,'susan';
select * from members;
  
  结果:
  3susan aaaaamale 1979-01-09 00:00:00.0000x00000000000001A95000.0000
  
  
  
create procedure select_members_by_id @id int
as
select * from members where id=@id;
  
execute select_members_by_id 3
  
  
  
  
  在存储过程中使用子查询:
create procedure multi_operation_members @id int
as
select * from members where id < (select count(*) from members)
  
execute multi_operation_members 30
  
  
  
  在存储过程中修改参数值,使用多个查询语句:
create procedure multi_operation_members_2 @id int
as
select @id = (select count(*) from members where id > @id)
select @id = @id - 2
select * from members where id = @id
  
execute multi_operation_members_2 3
  
  
  
  在存储过程中使用while循环,使用多个查询语句:
  create procedure while_circle_members @id int
as
declare @in int //定义临时变量
select @in = 0 //给临时变量赋初始值
while @in < @id //设定循环条件
begin

select @in = @in + 1 //临时变量增一select * from members
delete from members where id = @in
end
  
execute while_circle_members 10
  
  
  
  在存储过程中调用另一个存储过程
  create procedure procedure_1 @str varchar(20)
as
select 'execute procedure_1' as message, @str as name;
go
  create procedure procedure_2 @str varchar(20)
as
select 'begin procedure_2' as message, @str as name
execute procedure_1 @str
select 'end procedure_2' as message, @str as name
go
execute procedure_2 'bitan'
  

  结果:

  message name
----------------- --------------------
begin procedure_2 bitan
  (所影响的行数为 1 行)
  message name
------------------- --------------------
execute procedure_1 bitan
  (所影响的行数为 1 行)
  message name
--------------- --------------------
end procedure_2 bitan
  (所影响的行数为 1 行)
  在系统表中查看已经创建的存储过程:
  /*create proc my_proc_2
as
print 'This is my_proc_2'
return*/
  select convert(char(10),so.name) 'name', convert(char(60),sc.text) 'text', convert(char(30),so.crdate) 'crdate' from sysobjects so, syscomments sc where so.id = sc.id and so.name = 'my_proc_2'
  结果:
  name text crdate
---------- ------------------------------------------------------------ ------------------------------
my_proc_2 create proc my_proc_2
as
print 'This is my_proc_2'
return 03 15 2005 9:53AM
  (所影响的行数为 1 行)
  使用输入参数与输出参数:
  create proc my_proc_4
(@i int, @j int, @z int output)
as
select @z = @i + @j
print 'my_proc_4: ' + rtrim(convert(char,@i)) +
' + ' + rtrim(convert(char,@j)) +
' = ' + rtrim(convert(char,@z))
return
  declare @sum int
execute my_proc_4 1,2,@sum output
print 'result: ' + rtrim(convert(char,@sum))
execute my_proc_4 @j=4, @i=-10, @z=@sum output
print 'result: ' + rtrim(convert(char,@sum))
  结果:
  my_proc_4: 1 + 2 = 3
result: 3
my_proc_4: -10 + 4 = -6
result: -6

  给输入参数设置缺省值:
  create proc my_proc_5
(@i int = 5, @j int = 6, @z int output)
as
select @z = @i + @j
print 'my_proc_5: ' + rtrim(convert(char,@i)) +
' + ' + rtrim(convert(char,@j)) +
' = ' + rtrim(convert(char,@z))
return
  declare @sum int
exec my_proc_5 @z = @sum output
print 'result: ' + rtrim(convert(char,@sum))
exec my_proc_5 @i = -10, @z = @sum output
print 'result: ' + rtrim(convert(char,@sum))
exec my_proc_5 @i = -5, @j = -10, @z = @sum output
print 'result: ' + rtrim(convert(char,@sum))
  exec my_proc_5 default, default, @z = @sum output
print 'result: ' + rtrim(convert(char,@sum))
exec my_proc_5 @j = -15, @i = default, @z = @sum output
print 'result: ' + rtrim(convert(char,@sum))

  结果:
  my_proc_5: 5 + 6 = 11
result: 11
my_proc_5: -10 + 6 = -4
result: -4
my_proc_5: -5 + -10 = -15
result: -15
my_proc_5: 5 + 6 = 11
result: 11
my_proc_5: 5 + -15 = -10
result: -10
  利用缺省值进行参数检查:
  alter proc my_proc_6
(@i int = 0)
as
declare @s char
if @i = 0
begin
print 'Occur a error: ' + convert(char, @i)
end
else
begin
select @s = convert(char, @i * 100)
print 'result: ' + @s
end
return
  
  exec my_proc_6 default
exec my_proc_6
exec my_proc_6 5
  结果:
  
  Occur a error: 0
Occur a error: 0
result: 5

  捕获返回状态值:
  alter proc my_proc_7
(@s char(5) = 'bitan')
as
if @s is null //注意:当使用@s = null时,下面的 print 'param: null' 语句将不会显示结果。
begin
print 'param: null '
return -2
  end
if @s != 'bitan'
begin
print 'param: ' + @s
return -1
end
print 'param: ' + @s
return //注意:没有显式给出返回值,系统默认返回0。
  declare @i int
exec @i = my_proc_7
print 'state: ' + convert(char, @i)
exec @i = my_proc_7 null
print 'state: ' + convert(char, @i)
exec @i = my_proc_7 @s = null
print 'state: ' + convert(char, @i)
exec @i = my_proc_7 'aaaaaaaaaaaaaaaaa'
print 'state: ' + convert(char, @i)
  结果:
  
  param: bitan
state: 0
param: null
state: -2
param: null
state: -2
param: aaaaa
state: -1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294485-1-1.html 上篇帖子: Sql Server 表结构修改总结 下篇帖子: SQL Server 2005手工卸载命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表