使用SQL Enterprise Manager 创建存储过程
假如你要创建一个复杂的存储过程,使用SQL Enterprise Manager要比ISQL/w要容易得多,该程序允许你更容易地修改存储过程,它可以自动为你删除和重新创建存储过程。
要使用SQL Enterprise Manage来创建一个存储过程。首先启动该程序,选择你要用于存储表的数据库,然后在菜单上选择Manage|Manage Stored Procedure,这时就会显示如图12。4所示的窗口。
当你第一次打开存储过程管理对话框窗口时,会自动显示文本CREATE PROCEDURE <PROCEDURE NAME>。如果学过上面部分的内容,你就会对该文本非常的熟悉。这是CREATE PROCEDURE语句。替换<PROCEDURE NAME>成你所需要的名称。
在关键词AS后面,你可以输入组成你存储过程的语句。比如,假设你在数据库中有一个名为Philosophers的数据库表,其中包含了一些哲学家的列表。下面的存储过程在如果在数据库中有Plato存在时,会打印“Plato is a philosopher”;否则它会打印“Plato is not a philosopher”
CREATE PROCEDURE check_philosophers AS
IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
PRINT “Plato is a philosopher”
ELSE
PRINT “Plato is not a philosopher”
当你已经完成输入存储过程后,你可以点击保存对象按钮来保存之(它看起来象一个绿色的三角形)。
图12.4 存储过程管理对话框窗口
为了观看在你第一次保存之后的存储过程的文本,你需要在Procedure下拉菜单中再次选择该存储过程。SQL Server会自动在你的文档中插入新的语句。比如,在保存完check_philosophesr过程之后,会显示如下的文本:
if exists (select * from sysobjects where id=object_id(‘dbo.check_philisophers’) and sysstat & 0xf=4)
drop procedure dbo.check_philosophers
GO
CREATE PROCEDURE check_philosophers AS
IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
PRINT “Plato is a philosopher”
ELSE
PRINT “Plato is not a philosopher”
GO
为什么SQL Server要添加这些语句呢?这些语句是什么用的呢?这些添加的语句并不包含在存储过程中。它们的使用是使存储过程的使用变得更加容易。
当在过程中的第一个语句执行时,它检查是否有存储过程check_philosophers已经存在于数据库中。假如该过程已经存在,语句会删除该过程。这样,假如你修改了你的存储过程,然后点击Save Object按钮时,该语句会确保过程在修改后再次创建之前已经被删除了。
注意
在修改你的存储过程时,注意不要删除那些添加的语句。假如说你删除了第一个语句,你就不能正确地保存你的存储过程。相反的,你就会获得一个错误信息告诉你,存储过程已经存在于数据库中(假如你正处于这种情况下,你只需要用语句DROP PROCEDURE来删除前一版本)。
使用SQL Enterprise Manager而不是ISQL/w来创建你的存储过程的主要优点是使用Enterprise Manage可以在将来很容易地修改存储过程,在已经保存了存储过程之后,你可以使用管理存储过程对话框来选择和修改它。使用ISQL/w在创建了存储过程之后对其进行修改是非常困难的。