存储过程只是一个S Q L语句组合,它们被编译在一起,能通过单 个命令而被执行。存储过程能用于向用户返回数据、在表中插入新数据、修改数据、执行系 统函数和管理任务。总之,它们是SQL Server中功能非常强大的一部分,它能使你的工作更 轻松。存储过程具有能自动地在SQL Server上存储你的应用程序的业务逻辑和函数功能,这 样在服务器级上就可以对数据做出有关决策,而不是把结果返回给客户机。在过去几年里, 关于如何用存储过程支持这种功能,出现了两个主要的阵营。 第一个阵营认为,在存储过程中加入的功能越多越好。他们相信存储过程应能在数据 库的插入与更新中提供一切,以保持数据的有效性。赞成者的观点是,如果业务规则变化, 所有要做的仅仅是在服务器级更改存储过程,而不必在客户机级进行修改。反对者的观点是, 这种解决方案等于把所有的应用程序逻辑放进数据库,会使数据库本身的速度减慢。许多人 正在从这种解决方案转向下一种。 第二个阵营认为,所有由实际应用程序来处理的功能都应放在存储过程之外,并在数据 库之外进行处理。他们基本上认为应该放入存储过程的东西仅仅是实际的更新、插入和删除。 任何业务逻辑,比如数据有效性的校验,都应放在中间层或放在实际应用程序级。赞成这种 解决方案的是那些对速度要求高而且其数据库仅仅是为了存储数据的人。反对者的观点是, 如果你所有的业务逻辑都存储在前端的应用程序中,任何业务逻辑的变化都将导致程序的重 写、重编译以及重新分发。另一个主要问题是,当所有的应用程序逻辑都存储在数据库本身 时,很难把数据库从一个平台移植到另一个。通常通过使用包含所有业务逻辑的中间层应用 程序来解决这个问题。存储过程的用途几乎是无限的。从返回S E L E C T语句的结果并用于用户报表到执行复杂的 数据有效性校验,你可以用存储过程来做任何事。至于说存储过程到底能为你做什么,部分 地取决于你是属于前面列出的两个阵营中的哪一个。如果你是坚信所有的应用程序功能都应 包含在存储过程中的那种人,让存储过程做任何事就成为可能的了。如果你认为SQL Server 只应该用于存储数据,这也是一种选择。以下是存储过程的一些用途: • 模块化的程序设计—在你创建了一个存储过程之后,它就会存储在数据库中并能通过 你的应用程序多次调用它。这些过程能封装数据库功能,也能被应用程序代码独立地修 改,只要应用程序总是知道被返回的数据将要做什么。 • 快速执行—当存储过程被编译并存储在过程高速缓冲中时,它能以相当高的效率执行。 这是因为SQL Server无需不断地重复编译存储过程。 • 网络通信量—你时常会有长达数百行的S Q L语句。如果能把那些功能封装进存储过程, 就可以通过向SQL Server发送一行代码起到成百行的语句的作用,从而节省大量的网络 带宽。当仅有少量用户运行应用程序时,你的感受也许不深;但是如果有成千上万的用 户使用这个应用程序时,你就会深有感触。 • 安全性—存储过程能作为一种安全性机制使用。当你授权许可一个用户或一组用户使 用存储过程,他们将能够执行这个存储过程而不必有访问在存储过程中被访问的下层对 象的许可。例如,如果你创建了一个存储过程,用于返回p u b s数据库中a u t h o r s表的所有 行,然后许可一个名叫乔的人去执行那个存储过程,他就能从a u t h o r s表中检索出所有行, 而不必直接地授予他对a u t h o r s表的访问许可
存储过程的用途几乎是无限的。从返回S E L E C T语句的结果并用于用户报表到执行复杂的 数据有效性校验,你可以用存储过程来做任何事。至于说存储过程到底能为你做什么,部分 地取决于你是属于前面列出的两个阵营中的哪一个。如果你是坚信所有的应用程序功能都应 包含在存储过程中的那种人,让存储过程做任何事就成为可能的了。如果你认为SQL Server 只应该用于存储数据,这也是一种选择。以下是存储过程的一些用途: • 模块化的程序设计—在你创建了一个存储过程之后,它就会存储在数据库中并能通过 你的应用程序多次调用它。这些过程能封装数据库功能,也能被应用程序代码独立地修 改,只要应用程序总是知道被返回的数据将要做什么。 • 快速执行—当存储过程被编译并存储在过程高速缓冲中时,它能以相当高的效率执行。 这是因为SQL Server无需不断地重复编译存储过程。 • 网络通信量—你时常会有长达数百行的S Q L语句。如果能把那些功能封装进存储过程, 就可以通过向SQL Server发送一行代码起到成百行的语句的作用,从而节省大量的网络 带宽。当仅有少量用户运行应用程序时,你的感受也许不深;但是如果有成千上万的用 户使用这个应用程序时,你就会深有感触。 • 安全性—存储过程能作为一种安全性机制使用。当你授权许可一个用户或一组用户使 用存储过程,他们将能够执行这个存储过程而不必有访问在存储过程中被访问的下层对 象的许可。例如,如果你创建了一个存储过程,用于返回p u b s数据库中a u t h o r s表的所有 行,然后许可一个名叫乔的人去执行那个存储过程,他就能从a u t h o r s表中检索出所有行, 而不必直接地授予他对a u t h o r s表的访问许可
SQL Server虽好,也不要贪用啊
个命令而被执行。存储过程能用于向用户返回数据、在表中插入新数据、修改数据、执行系
统函数和管理任务。总之,它们是SQL Server中功能非常强大的一部分,它能使你的工作更
轻松。存储过程具有能自动地在SQL Server上存储你的应用程序的业务逻辑和函数功能,这
样在服务器级上就可以对数据做出有关决策,而不是把结果返回给客户机。在过去几年里,
关于如何用存储过程支持这种功能,出现了两个主要的阵营。
第一个阵营认为,在存储过程中加入的功能越多越好。他们相信存储过程应能在数据
库的插入与更新中提供一切,以保持数据的有效性。赞成者的观点是,如果业务规则变化,
所有要做的仅仅是在服务器级更改存储过程,而不必在客户机级进行修改。反对者的观点是,
这种解决方案等于把所有的应用程序逻辑放进数据库,会使数据库本身的速度减慢。许多人
正在从这种解决方案转向下一种。
第二个阵营认为,所有由实际应用程序来处理的功能都应放在存储过程之外,并在数据
库之外进行处理。他们基本上认为应该放入存储过程的东西仅仅是实际的更新、插入和删除。
任何业务逻辑,比如数据有效性的校验,都应放在中间层或放在实际应用程序级。赞成这种
解决方案的是那些对速度要求高而且其数据库仅仅是为了存储数据的人。反对者的观点是,
如果你所有的业务逻辑都存储在前端的应用程序中,任何业务逻辑的变化都将导致程序的重
写、重编译以及重新分发。另一个主要问题是,当所有的应用程序逻辑都存储在数据库本身
时,很难把数据库从一个平台移植到另一个。通常通过使用包含所有业务逻辑的中间层应用
程序来解决这个问题。存储过程的用途几乎是无限的。从返回S E L E C T语句的结果并用于用户报表到执行复杂的
数据有效性校验,你可以用存储过程来做任何事。至于说存储过程到底能为你做什么,部分
地取决于你是属于前面列出的两个阵营中的哪一个。如果你是坚信所有的应用程序功能都应
包含在存储过程中的那种人,让存储过程做任何事就成为可能的了。如果你认为SQL Server
只应该用于存储数据,这也是一种选择。以下是存储过程的一些用途:
• 模块化的程序设计—在你创建了一个存储过程之后,它就会存储在数据库中并能通过
你的应用程序多次调用它。这些过程能封装数据库功能,也能被应用程序代码独立地修
改,只要应用程序总是知道被返回的数据将要做什么。
• 快速执行—当存储过程被编译并存储在过程高速缓冲中时,它能以相当高的效率执行。
这是因为SQL Server无需不断地重复编译存储过程。
• 网络通信量—你时常会有长达数百行的S Q L语句。如果能把那些功能封装进存储过程,
就可以通过向SQL Server发送一行代码起到成百行的语句的作用,从而节省大量的网络
带宽。当仅有少量用户运行应用程序时,你的感受也许不深;但是如果有成千上万的用
户使用这个应用程序时,你就会深有感触。
• 安全性—存储过程能作为一种安全性机制使用。当你授权许可一个用户或一组用户使
用存储过程,他们将能够执行这个存储过程而不必有访问在存储过程中被访问的下层对
象的许可。例如,如果你创建了一个存储过程,用于返回p u b s数据库中a u t h o r s表的所有
行,然后许可一个名叫乔的人去执行那个存储过程,他就能从a u t h o r s表中检索出所有行,
而不必直接地授予他对a u t h o r s表的访问许可
数据有效性校验,你可以用存储过程来做任何事。至于说存储过程到底能为你做什么,部分
地取决于你是属于前面列出的两个阵营中的哪一个。如果你是坚信所有的应用程序功能都应
包含在存储过程中的那种人,让存储过程做任何事就成为可能的了。如果你认为SQL Server
只应该用于存储数据,这也是一种选择。以下是存储过程的一些用途:
• 模块化的程序设计—在你创建了一个存储过程之后,它就会存储在数据库中并能通过
你的应用程序多次调用它。这些过程能封装数据库功能,也能被应用程序代码独立地修
改,只要应用程序总是知道被返回的数据将要做什么。
• 快速执行—当存储过程被编译并存储在过程高速缓冲中时,它能以相当高的效率执行。
这是因为SQL Server无需不断地重复编译存储过程。
• 网络通信量—你时常会有长达数百行的S Q L语句。如果能把那些功能封装进存储过程,
就可以通过向SQL Server发送一行代码起到成百行的语句的作用,从而节省大量的网络
带宽。当仅有少量用户运行应用程序时,你的感受也许不深;但是如果有成千上万的用
户使用这个应用程序时,你就会深有感触。
• 安全性—存储过程能作为一种安全性机制使用。当你授权许可一个用户或一组用户使
用存储过程,他们将能够执行这个存储过程而不必有访问在存储过程中被访问的下层对
象的许可。例如,如果你创建了一个存储过程,用于返回p u b s数据库中a u t h o r s表的所有
行,然后许可一个名叫乔的人去执行那个存储过程,他就能从a u t h o r s表中检索出所有行,
而不必直接地授予他对a u t h o r s表的访问许可