一直都很想了解如何写存储过程,对于不熟悉的东西,总是觉得很神秘,呵呵。特别是看着同学写的那些存储过程,由于不了解存储过程的基本语法,看起来甚是吃力,很难理解。一直拖到今天,终于打开了SQL Server的联机丛书,了解了一些它的基本用法。以下是一些摘录,希望自己以后再次看的时候,可以加深理解,更加好的掌握。
1、设计存储过程
几乎任何可写成批处理的 Transact-SQL 代码都可用于创建存储过程。
2、存储过程的设计规则
存储过程的设计规则包括:
- CREATE PROCEDURE 定义本身可包括除下列 CREATE 语句以外的任何数量和类型的 SQL 语句,存储过程中的任意地方都不能使用下列语句:
CREATE DEFAULT CREATE TRIGGER CREATE PROCEDURE CREATE VIEW CREATE RULE
- 可在存储过程中创建其它数据库对象。可以引用在同一存储过程中创建的对象,前提是在创建对象后再引用对象。
- 可以在存储过程内引用临时表。
- 如果在存储过程内创建本地临时表,则该临时表仅为该存储过程而存在;退出该存储过程后,临时表即会消失。
- 如果执行调用其它存储过程的存储过程,那么被调用存储过程可以访问由第一个存储过程创建的、包括临时表在内的所有对象。
- 如果执行在远程 Microsoft® SQL Server™ 2000 实例上进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理。
- 存储过程中参数的最大数目为 2100。
- 存储过程中局部变量的最大数目仅受可用内存的限制。
- 根据可用内存的不同,存储过程的最大大小可达 128 MB。
在存储过程内部,如果用于诸如 SELECT 或 INSERT 这样的语句的对象名没有限定用户,那么用户将默认为该存储过程的所有者。在存储过程内部,如果创建存储过程的用户没有限定 SELECT、INSERT、UPDATE 或 DELETE 语句中引用的表名,那么通过该存储过程对这些表进行的访问将默认地受到该过程的创建者权限的限制。4、加密过程定义
如果有其他用户要使用存储过程,则用于语句 ALTER TABLE、CREATE TABLE、DROP TABLE、TRUNCATE TABLE、CREATE INDEX、DROP INDEX、UPDATE STATISTICS 和 DBCC 的对象名必须用该对象所有者的名称限定。例如,Mary 拥有表 marytab,如果她希望其他用户能够执行使用该表的存储过程,必须在该表用于上述某一条语句时对其表名进行限定。
此规则是必需的,因为运行存储过程时将解析对象的名称。如果未限定 marytab,而 John 试图执行该过程,SQL Server 将查找 John 所拥有的名为 marytab 的表。
如果要创建存储过程,并且希望确保其他用户无法查看该过程的定义,那么可以使用 WITH ENCRYPTION 子句。这样,过程定义将以不可读的形式存储。
存储过程一旦加密其定义即无法解密&#x