什么是存储过程
- 一组为了完成特定功能的 SQL 语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行
- 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的 SQL 语句块要快。
- 优点:模块化、性能、安全
创建存储过程
模板:
CREATE PROCEDURE myStoredProcedure AS
...
OR
CREATE PROCEDURE myStoredProcedure @{Parameter Name} {data type} AS
...
示例:
1.带参数的存储过程
CREATE PROCEDURE LatestTasks @Count int AS
SET ROWCOUNT @Count
SELECT TaskName AS LatestTasks, DateCreated
FROM Tasks
ORDER BY DateCreated DESC
2.实际应用示例,带多参数的存储过程
create proc AddCase @Number nvarchar(max), @Title nvarchar(max), @SLAEndTime datetime, @IR nvarchar(16), @CallingCountry nvarchar(10), @CurrentQueue nvarchar(max)
as
declare @a uniqueidentifier
set @a = newID()
insert into [Case] values(@a, @Number, @Title, @SLAEndTime, @IR, @CallingCountry, @CurrentQueue)
insert into [IsReviewed] values(newID(), @a, 0)
insert into [IsMisrouted] values(newID(), @a, null)
执行存储过程
EXEC LatestTasks @Count = 5
修改存储过程
ALTER PROCEDURE LatestTasks @Count int AS
SET ROWCOUNT @Count
SELECT TaskName AS "Latest Tasks", Description, DateCreated
FROM Tasks
ORDER BY DateCreated DESC
在创建和执行存储过程时,可能需要用到用户变量
声明变量
declare @变量 类型
示例:
declare @a uniqueidentifier
变量赋值
可以用set语句和select
1.set语句:
set @a = newID()
2.select语句:
select @a = nreID()
在执行存储过程时,无法将参数直接赋值为newID()或getdate()等函数值,可以先声明一个变量并赋值后,将改变量作为参数传递给存储过程