aboutStoreProcedure---------Sql Server

 

Exec sp_depends [表、视图、等数据库对象]

更改、删除一个数据库对象时,最好先在Enterprise Management 中右击该对象----〉“显示相关性”-----〉显示出来的左边是依赖该对象的对象列表,右边是该对象依赖的那些对象的列表。左边一般是视图、过程等;右边一般是数据表等。

2Exec sp_rename prTest2 prTest3 其中prTest2为原表名,prTest3 为新表名,but when server is running , this statement will lead to some problem unexpeted

3Delete a procedure : drop procedure prTest  删除该过程

4Sql Server 中有“过程高速缓存”(内存的一部分)用于存放编译后的存储过程,所以必须清除“过程高速缓存”来迫使所有相关联的存储过程重编译。可以使用 DBCC FREEPROCCACHE 或重启SQL Server来清除“过程高速缓存”

5Sp_stored_procedure   列出当前数据库中的所有存储过程

6Select * from sysobjects 列出所有对象,sql Server 会将每一个数据库对象记录在sysobjects表中。

7Select * from sysobjects where xtype=’p’ 只选出用户定义的存储过程。

8.在“对象浏览器”(查询分析器的左边)的列表中右键单击存储过程〉编辑,将在右边显示该存储过程。或者在查询分析器中:exec sp_helptext prTest2 其中prTest2 既可以是存储过程名也可以是表名等数据库对象名。

9.在执行过程中强制重编译一个存储过程也是可能的用户或开发人员可以用:with recompile实现。

Create procedure prListOrders

@country cha(3)

With recompile

As

Select * from orders where shipCountry =@country

Go

这种方式创建的存储过程执行规划,不会存放在“过程高速缓存”中。

10.存储过程引用的表发生改变时,Sql Server 会重新编译该过程,但当DBA增加一个有助于存储过程执行的索引时,sql Server却不会主动重新编译该存储过程,仅当“过程高速缓存”被冲刷时(通常在Sql Server 重启时发生),该存储过程才会被重新编译。如果要强制重新编译一个存储过程,DBA也可以使用exec sp_recompile prTest3。如果有许多存储过程和/或触发器都引用同一张表,当给这张表增加了索引后,可能要找出所有对该表有依赖关系的对象,对之进行重编译:exec sp_recompile prTest3  prTest3 可能要更换很多次。或者:exec sp_recompile orders 这条语句将会重编译所有依赖于orders的触发器和存储过程,而当一个存储过程或触发器被指定作为这条语句的参数时,仅仅是被指定的存储过程/触发器会被重编译,如果用表名或视图名,则所有相关的对象都会被重编译。

11SqlServer会将每个数据库对象记录在sysobjects

If exists(select * from sysobjects where id=object_id(‘getEquipment’) and objectProperty(id,’IsProcedure’)=1)

Drop procedure getEquipment

Go

Create procedure getEquipment

@EqTypeID int

As

Select * from Equipment

Where EqTypeId=@EqTypeId

GO

 

posted on 2007-08-12 07:07  simhare  阅读(167)  评论(0编辑  收藏  举报

导航