在SQL中存储过程的一般语法

一般分为十种情况,每种语法各不相同:

1、 创建语法


1

2

3

4

5

6

7

create proc | procedure pro_name

   [{@参数数据类型} [=默认值] [output],

    {@参数数据类型} [=默认值] [output],

    ....

   ]

as

   SQL_statements

2、 创建不带参数存储过程


1

2

3

4

5

6

7

8

9

10

--创建存储过程

if (exists (select from sys.objects where name ‘proc_get_student‘))

    drop proc proc_get_student

go

create proc proc_get_student

as

    select from student;

--调用、执行存储过程

exec proc_get_student;

3、 修改存储过程


1

2

3

4

--修改存储过程

alter proc proc_get_student

as

select from student;

4、 带参存储过程


1

2

3

4

5

6

7

8

9

10

--带参存储过程

if (object_id(‘proc_find_stu‘‘P‘is not null)

    drop proc proc_find_stu

go

create proc proc_find_stu(@startId int, @endId int)

as

    select from student where id between @startId and @endId

go

exec proc_find_stu 2, 4;

5、 带通配符参数存储过程


1

2

3

4

5

6

7

8

9

10

11

--带通配符参数存储过程

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、 带输出参数存储过程


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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、 不缓存存储过程


1

2

3

4

5

6

7

8

9

10

11

--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、 加密存储过程


1

2

3

4

5

6

7

8

9

10

11

12

13

--加密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 <a href="https://www.baidu.com/s?wd=sp_helptext&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYm103n1DYmHfknhD3nWD10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPW63nHcdrH6" target="_blank" class="baidu-highlight">sp_helptext</a> ‘proc_temp‘;

exec <a href="https://www.baidu.com/s?wd=sp_helptext&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYm103n1DYmHfknhD3nWD10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPW63nHcdrH6" target="_blank" class="baidu-highlight">sp_helptext</a> ‘proc_temp_encryption‘;

9、 带游标参数存储过程


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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 (<a href="https://www.baidu.com/s?wd=%40%40fetch_status&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYm103n1DYmHfknhD3nWD10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPW63nHcdrH6" target="_blank" class="baidu-highlight">@@fetch_status</a> = 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;--删除游标

10、 分页存储过程


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

---存储过程、row_number完成分页

if (object_id(‘pro_page‘‘P‘is not null)

    drop proc proc_cursor

go

create proc pro_page

    @startIndex int,

    @endIndex int

as

    select count(*) from product

;    

    select from (

        select row_number() over(order by pid) as rowId, * from product 

    temp

    where temp.rowId between @startIndex and @endIndex

go

--drop proc pro_page

exec pro_page 1, 4

--

--分页存储过程

if (object_id(‘pro_page‘‘P‘is not null)

    drop proc pro_stu

go

create procedure pro_stu(

    @pageIndex int,

    @pageSize int

)

as

    declare @startRow int, @endRow int

    set @startRow = (@pageIndex - 1) * @pageSize +1

    set @endRow = @startRow + @pageSize -1

    select from (

        select *, row_number() over (order by id ascas number from student 

    ) t

    where t.number between @startRow and @endRow;

exec pro_stu 2, 2;

时间: 2024-10-27 07:52:41

在SQL中存储过程的一般语法的相关文章

面试问题 - SQL 中存储过程与函数的区别

SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临时表 存储过程 -> 可以返回多个变量. 存储过程的定义如下: 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量

SQL中存储过程和函数的区别

本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样.      函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少       1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.       2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象.       3.    存储过程

Sql 中存储过程详细案例

转自:http://www.cnblogs.com/yank/p/4235609.html 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure procedure_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], .... ] as SQL_statementsgo 存储过程与SQL语句对比 优势: 1.提高性能

SQL中存储过程和自定义函数的区别(转载)

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程和自定义函数的区别

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程与自定义函数的区别

存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 优点 ①重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. ②提高性能.存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译.一般的SQL语句每

C#调用SQL中存储过程并用DataGridView显示执行结果

//连接数据库 SqlConnection con = new SqlConnection("server=服务器名称;database=数据库名称;user id=登录名;pwd=登录密码;"); //打开数据库 con.Open(); //调用存储过程 SqlCommand scd = new SqlCommand("存储过程名称", con); scd.CommandType = CommandType.StoredProcedure;//调用命令改成存储格式

在Delphi中如何获得SQL中存储过程的返回值?

示例存储过程:create procedure proc_loginusername varchar(20),password varchar(20)asdeclare @result intselect @result=count(*) from loginuser where [email protected] and [email protected]if @result=0return 0return 1go Delphi代码:var ret:integer;......      wi

SQL中存储过程out与output有什么不

以下是脚本内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 --SQLQuery Create By Faywool create proc Proc_OutPutTest--创建