SQL存储过程

时间:2020-02-23 14:32:35  来源:igfitidea点击:

在本文中,我们将重点介绍SQL存储过程。

什么是存储过程?

存储过程可以视为系统编程的宏。
SQL存储过程是一个自定义的预定义的SQL代码,可以通过相应调用该函数在数据库中执行过程中的任何时间点使用它。

SQL存储过程可实现代码的可重用性,并有助于节省大量执行时间。

例如,让我们考虑一个的登录数据库,其中对于任何实用程序功能,都必须预览用户的登录详细信息。
同样,我们可以创建一个包含SQL SELECT语句的存储过程来查看登录详细信息。

因此,每次数据库管理员想要预览用户的登录详细信息时,都可以通过调用存储过程来轻松完成。

这样可以节省一次又一次执行同一SQL查询的开销。

创建一个SQL存储过程

SQL存储过程实际上定义为在执行时要调用的SQL代码块。

我们使用SQL CREATE和INSERT查询创建了一个表" Info",其数据列为" id"和" Cost"。
SQL SELECT语句用于显示"信息"表的内容。

创建一个数据库:

create table Info(id integer, Cost integer);
insert into Info(id, Cost) values(1, 100);
insert into Info(id, Cost) values(2, 50);
insert into Info(id, Cost) values(3, 65);
insert into Info(id, Cost) values(4, 97);
insert into Info(id, Cost) values(5, 12);

select * from Info;

输出:

1	100
2	50
3	65
4	97
5	12

创建数据库表之后,让我们使用以下命令创建一个SQL存储过程:

语法:

CREATE PROCEDURE procedure-name
AS
<SQL Commands>
GO;

GO语句不是强制性查询。
它可以帮助整个存储过程块分别由编译器立即执行。

例:

CREATE PROCEDURE show
AS
SELECT * FROM Info
GO;

执行存储过程

可以通过以下命令在整个程序执行过程中的任何位置调用SQL存储过程:

语法:

EXEC procedure-name;

因此,每次我们通过SQL EXEC查询调用SQL存储过程时,它都会立即执行整个SQL块。

例:

EXEC show;

输出:

1	100
2	50
3	65
4	97
5	12

具有单个参数的存储过程

SQL存储过程也可以使用参数。
我们可以使用一个或者多个参数创建存储过程,然后通过向其提供参数来调用该过程。

语法:

CREATE PROCEDURE procedure-name @variable data-type
AS
SELECT * FROM Table
WHERE column = @variable;

其中我们使用SQL WHERE子句对存储过程的执行设置了限制,在该存储过程中,仅将显示满足上述条件的那些数据值。

例:

CREATE PROCEDURE disp @Cost nvarchar(30)
AS
SELECT * FROM Info WHERE Cost = @Cost;

在上面的示例中,我们创建了一个存储过程,该存储过程具有一个声明为" Cost"且数据类型为nvarchar的参数。
我们通过WHERE子句应用了一个条件,根据该条件,将显示"成本"参数值=" 100"的那些值。

EXEC disp @Cost = "100";

输出:

Cost
100

具有多个参数的SQL存储过程

SQL存储过程通过使用SQL AND运算符来占用数据库的多个参数。

语法:

CREATE PROCEDURE procedure-name @variable1 data-type, @variable2 data-type
AS
SELECT * FROM Table
WHERE column1 = @variable1 AND column2 = @variable2;

例:

CREATE PROCEDURE Multi_disp @Cost nvarchar(30), @id INTEGER
AS
SELECT * FROM Info WHERE Cost = @Cost AND id = @id;

因此,在此示例中,我们创建了一个带有两个参数" id"和" Cost"的SQL存储过程。

EXEC Multi_disp @Cost = "100" , @id = "1";

可以看到,当编译器遇到上述执行语句时,它仅显示id = 1和cost = 100的那些数据值。

id         Cost
1          100