创建存储过程
积累:
(1)SQLServer中的存储过程用declare声明的变量和不用declare声明的变量的区别:不需要Declare 定义的,是给你传进来的参数;需要Declare 定义的是你在存储过程中将要用到的参数
(2)局部变量和全局变量
局部变量:声明:DECLARE @local_variable data_type
@local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。
全局变量:全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。下面是我统计了一些较为常用的变量
参考:http://blog.sina.com.cn/s/blog_7e4815650100w8ql.html
(3)临时表与表变量
参考:http://www.cnblogs.com/chillsrc/archive/2008/09/24/1297806.html
创建表event
CREATE TABLE [dbo].[event] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[age] int NULL ,
[createDate] datetime NULL DEFAULT (getdate())
)
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
1.procedure_name:存储过程名称。过程名称必须符合标识规则,且对于数据库及其所有者必须唯一
exa:创建一个简单的查询表信息的存储信息
CREATE PROCEDURE sqlprott
AS
SELECT * FROM event
GO
2, ;number:可选择的参数,是用来对于同名的存储过程进行分组,以便用一条drop proc 存储过程名来删除一组的存储过程。
exa:创建一个名为sqlpro的存储过程,分为三组
exa_1:
CREATE PROCEDURE sqlproo;1
AS
sql_statement
exa_2:
CREATE PROCEDURE sqlproo;2
AS
sql_statement
exa_3:
CREATE PROCEDURE sqlproo;3
AS
sql_statement
当用drop proc sqlproc删除存储过程时,三组存储过程同时被删除
3.@parameter data_type:@parameter参数变量,data_type数据类型
exa:创建一个带参数的存储过程
CREATE PROCEDURE sqlproc
@name VARCHAR(30)
AS
SELECT * FROM event
WHERE name=@name
执行:EXEC sqlproc '参数条件' or EXEC sqlproc @name='参数条件'
4. default设置默认参数
exa:创建一个输入的且参数是默认的
create procedure sqlproc
@name varchar(30)='参数变量'
as
select * from event
where name=@name
5. 带有输入和输出的存储过程
exa:
create proc procc
@name varchar(30),
@num int output
as
select @num=count(*) from event where name=@name
执行:
declare @rr int
exec procc '22'(参数),@rr OUTPUT
select @rr
6. 带返回值得存储过程(非结果集)
exa:
create proc checkreturn(@name varchar(100))
as
begin
if(select count(*) from event
where name=@name)>0
return 1
else
return 0
end
7.带有通配符的存储过程
exa:
CREATE PROC pro_1
@ename VARCHAR(40)='l%'
AS
BEGIN
SELECT * FROM event WHERE name LIKE @ename
END
执行:
如果不给输入参数,参数ude默认值将是存储过程给定的值
exec pro_1;
给出输入参数
exec proc_1 '%z%';
8.存储过程中通过循环进行插入数据
CREATE PROCEDURE proc_1
AS
DECLARE @num INT
DECLARE @i INT
SET @i=0
SELECT @num=COUNT(id) FROM event
WHILE(@i<@num)
BEGIN
INSERT INTO event VALUES(21,'gege')
if(@i=3) BREAK
ELSE SET @i=@i+1
END
未完待续额。。。。。