SQL Server 中的存储过程与其它编程语言中的过程类似,原因是存储过程可以:
1 接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理
2 包含执行数据库操作(包括调用其它过程)的编程语言
3 向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)
使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有:
1 允许模块化程序设计。
只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程 可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。
2 允许更快执行。
如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。首次执行时将对其进行分析和优化,并在内存高速缓存中保留存储过程的编译版本,以便以后使用。这意味着每次使用存储过程时,无需重新分析和重新优化,从而缩短了执行时间。
3 减少网络流量。
一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
4 可作为安全机制使用。
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。
而触发器和约束是用来强制业务规则和数据完整性,触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的 Transact-SQL 语句。
触发器的优点如下:
1 触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。
2 触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。
与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
3 触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
4 一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
1 接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理
2 包含执行数据库操作(包括调用其它过程)的编程语言
3 向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)
使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有:
1 允许模块化程序设计。
只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程 可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。
2 允许更快执行。
如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。首次执行时将对其进行分析和优化,并在内存高速缓存中保留存储过程的编译版本,以便以后使用。这意味着每次使用存储过程时,无需重新分析和重新优化,从而缩短了执行时间。
3 减少网络流量。
一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
4 可作为安全机制使用。
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。
而触发器和约束是用来强制业务规则和数据完整性,触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的 Transact-SQL 语句。
触发器的优点如下:
1 触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。
2 触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。
与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
3 触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
4 一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。