sql server 存储过程

来源:互联网 发布:js微信授权获取code 编辑:程序博客网 时间:2024/05/16 16:56

创建存储过程

积累:

(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()) 
)

1."标准"
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

未完待续额。。。。。

0 0
原创粉丝点击