[BILL WEI]SQL 存储过程学习
--查看数据库
exec sp_databases ;
--查看表
exec sp_tables
;
--查看列
exec sp_columns WMS_ASN;
--查看索引
exec
sp_helpindex WMS_ASN;
--约束
exec sp_helpconstraint
WMS_ASN;
--列出数据库中的所有存储过程
exec
sp_stored_procedures
--查看存储过程创建、定义语句
exec sp_helptext
‘xp_revokelogin‘
--修改表、索引、列的名称
exec sp_rename
WMS_ASN,WMS_ASNS
exec sp_rename
‘wms_asn.kids‘,‘KID‘,‘column‘
select * from wms_asn
--更改数据库名称
exec sp_renamedb myTempDB,
myDB;
--更改登录名的默认数据库
exec sp_defaultdb ‘master‘,
‘myDB‘;
--数据库帮助,查询数据库信息
exec sp_helpdb
exec sp_helpdb
master
--重命名索引
exec sp_rename N‘WMS_ASN.PK_WMS_ASN_KID1‘,
N‘PK_WMS_ASN_KID‘, N‘index‘;
exec sp_help ‘WMS_ASN‘;
--查询所有存储过程
select * from sys.objects where type =
‘P‘;
select * from sys.objects where type_desc like ‘%pro%‘ and
name like ‘sp%‘;
? 用户自定义存储过程
1. 创建语法
create proc | procedure pro_name
[{@参数数据类型} [=默认值]
[output],
{@参数数据类型} [=默认值] [output],
....
]
as
SQL_statements
2.创建不带参数存储过程
--创建存储过程
if (exists (select * from sys.objects where name =
‘proc_get_asn‘))
drop proc proc_get_asn
go
create proc
proc_get_asn
as
select * from wms_asn;
--调用、执行存储过程
exec proc_get_asn;
3.修改存储过程
--修改存储过程
alter proc proc_get_asn
as
select * from
wms_asn where type=‘0003‘ ;
drop proc proc_get_asn
4.
带参存储过程
--带参存储过程
if (object_id(‘proc_find_asn‘, ‘P‘) is not null)
drop proc proc_find_asn
go
create proc
proc_find_asn(@startId numeric, @endId numeric)
as
select
* from wms_asn where gross_weight between @startId and
@endId
go
exec proc_find_asn 500, 1000;
exec proc_find_asn 0,10000;
5. 带通配符参数存储过程
--带通配符参数存储过程
if (object_id(‘proc_findStudentByName‘, ‘P‘) is
not null)
drop proc proc_findStudentByName
go
create
proc proc_findStudentByName(@name varchar(20) = ‘%j%‘, @nextName
varchar(20) = ‘%‘)
as
select * from student where name
like @name and name like @nextName;
go
exec proc_findStudentByName;
exec proc_findStudentByName
‘%o%‘, ‘t%‘;
6. 带输出参数存储过程
if (object_id(‘proc_getStudentRecord‘, ‘P‘) is not null)
drop proc proc_getStudentRecord
go
create proc
proc_getStudentRecord(
@id int, --默认输入参数
@name varchar(20)
out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @name = name, @age = age from student where id = @id and sex
= @age;
go
--
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec
proc_getStudentRecord @id, @name out, @temp output;
select @name,
@temp;
print @name + ‘#‘ + @temp;
7. 不缓存存储过程
--WITH RECOMPILE 不缓存
if (object_id(‘proc_temp‘, ‘P‘) is not
null)
drop proc proc_temp
go
create proc
proc_temp
with recompile
as
select * from
student;
go
exec proc_temp;
8. 加密存储过程
--加密WITH ENCRYPTION
if (object_id(‘proc_temp_encryption‘,
‘P‘) is not null)
drop proc
proc_temp_encryption
go
create proc
proc_temp_encryption
with encryption
as
select * from
student;
go
exec proc_temp_encryption;
exec sp_helptext
‘proc_temp‘;
exec sp_helptext ‘proc_temp_encryption‘;
9. 带游标参数存储过程
if (object_id(‘proc_cursor‘, ‘P‘) is not null)
drop proc
proc_cursor
go
create proc proc_cursor
@cur cursor
varying output
as
set @cur = cursor forward_only static
for
select id, name, age from student;
open
@cur;
go
--调用
declare @exec_cur cursor;
declare @id
int,
@name varchar(20),
@age int;
exec
proc_cursor @cur = @exec_cur output;--调用存储过程
fetch next from
@exec_cur into @id, @name, @age;
while (@@fetch_status =
0)
begin
fetch next from @exec_cur into @id, @name,
@age;
print ‘id: ‘ + convert(varchar, @id) + ‘, name: ‘ +
@name + ‘, age: ‘ + convert(char, @age);
end
close
@exec_cur;
deallocate @exec_cur;--删除游标