欢迎来到天天文库
浏览记录
ID:34725825
大小:63.21 KB
页数:14页
时间:2019-03-10
《sql2005创建存储过程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、sql2005创建存储过程创建存储过程。存储过程是已保存的Transact-SQL语句集合,或对Microsoft.NETFramework公共语言运行时(CLR)方法的引用,可接收并返回用户提供的参数。可以创建过程供永久使用,或在一个会话(局部临时过程)中临时使用,或在所有会话(全局临时过程)中临时使用。启动SQLServer的一个实例时,也可以创建并自动运行存储过程。Transact-SQL语法约定语法CREATE{PROC
2、PROCEDURE}[schema_name.]procedure_name[;number] [{@parameter[type_sc
3、hema_name.]data_type} [VARYING][=default][[OUT[PUT] ][,...n] [WITH[,...n][FORREPLICATION] AS{[;][...n]
4、}[;]::= [ENCRYPTION] [RECOMPILE] [EXECUTE_AS_Clause]::= {[BEGIN]statements[END]}5、hod_specifier>::=EXTERNALNAMEassembly_name.class_name.method_name备注Transact-SQL存储过程的最大大小为128MB。只能在当前数据库中创建用户定义存储过程。临时过程对此是个例外,因为它们总是在tempdb中创建。如果未指定架构名称,则使用创建过程的用户的默认架构。有关架构的详细信息,请参阅用户架构分离。在单个批处理中,CREATEPROCEDURE语句不能与其他Transact-SQL语句组合使用。默认情况下,参数可为空值。如果传递NULL参数值并且在CREATE或ALTERTABLE语句中使用该6、参数,而该语句中被引用列又不允许使用空值,则数据库引擎会产生一个错误。若要阻止向不允许使用空值的列传递NULL,请为过程添加编程逻辑,或使用CREATETABLE或ALTERTABLE的DEFAULT关键字,以便对该列使用默认值。存储过程中的任何CREATETABLE或ALTERTABLE语句都将自动创建临时表。建议对于临时表中的每列,显式指定NULL或NOTNULL。如果在CREATETABLE或ALTERTABLE语句中未进行指定,则ANSI_DFLT_ON和ANSI_DFLT_OFF选项将控制数据库引擎为列指派NULL或NOTNULL属性的方式。如果某个连接执行的7、存储过程对这些选项的设置与创建该过程的连接的设置不同,则为第二个连接创建的表列可能会有不同的为空性,并且显示出不同的行为。如果为每个列显式声明了NULL或NOTNULL,那么将对所有执行该存储过程的连接使用相同的为空性创建临时表。使用SET选项在创建或修改Transact-SQL存储过程时,数据库引擎将保存SETQUOTED_IDENTIFIER和SETANSI_NULLS的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的SETQUOTED_IDENTIFIER和SETANSI_NULLS设置在执行存储过程时都将被忽略。在创建或更改存储过程时不保存其他S8、ET选项(例如SETARITHABORT、SETANSI_WARNINGS或SETANSI_PADDINGS)。如果存储过程的逻辑取决于特定的设置,则应在过程开头添加一条SET语句,以确保设置正确。从存储过程中执行SET语句时,该设置只在存储过程完成之前有效。之后,设置将还原为调用存储过程时的值。这样一来,单个客户端就可以设置所需的选项,而不会影响存储过程的逻辑。注意: 在传递存储过程或用户定义函数中的参数时,或在声明和设置批语句中的变量时,ANSI_WARNINGS的优先级较低。例如,如果一个变量被定义为char(3),但后来将该参数设置为一个大于三个字符的值,则数据9、将被截断为定义的大小,并且INSERT或UPDATE语句将执行成功。 使用CLR存储过程的参数CLR存储过程的参数可以是标量SQLServer系统数据类型的任何一种。为了使数据库引擎在.NETFramework中被重载时引用正确的方法,中指示的方法必须具有下列特征:声明为静态方法。接收的参数个数与过程的参数个数相同。不能是类的构造函数或析构函数。使用的参数类型与SQLServer过程的相应参数的数据类型兼容。有关将SQLServer数据类型与.NETFramework数据类型匹配的信息,请参阅SQLSe
5、hod_specifier>::=EXTERNALNAMEassembly_name.class_name.method_name备注Transact-SQL存储过程的最大大小为128MB。只能在当前数据库中创建用户定义存储过程。临时过程对此是个例外,因为它们总是在tempdb中创建。如果未指定架构名称,则使用创建过程的用户的默认架构。有关架构的详细信息,请参阅用户架构分离。在单个批处理中,CREATEPROCEDURE语句不能与其他Transact-SQL语句组合使用。默认情况下,参数可为空值。如果传递NULL参数值并且在CREATE或ALTERTABLE语句中使用该
6、参数,而该语句中被引用列又不允许使用空值,则数据库引擎会产生一个错误。若要阻止向不允许使用空值的列传递NULL,请为过程添加编程逻辑,或使用CREATETABLE或ALTERTABLE的DEFAULT关键字,以便对该列使用默认值。存储过程中的任何CREATETABLE或ALTERTABLE语句都将自动创建临时表。建议对于临时表中的每列,显式指定NULL或NOTNULL。如果在CREATETABLE或ALTERTABLE语句中未进行指定,则ANSI_DFLT_ON和ANSI_DFLT_OFF选项将控制数据库引擎为列指派NULL或NOTNULL属性的方式。如果某个连接执行的
7、存储过程对这些选项的设置与创建该过程的连接的设置不同,则为第二个连接创建的表列可能会有不同的为空性,并且显示出不同的行为。如果为每个列显式声明了NULL或NOTNULL,那么将对所有执行该存储过程的连接使用相同的为空性创建临时表。使用SET选项在创建或修改Transact-SQL存储过程时,数据库引擎将保存SETQUOTED_IDENTIFIER和SETANSI_NULLS的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的SETQUOTED_IDENTIFIER和SETANSI_NULLS设置在执行存储过程时都将被忽略。在创建或更改存储过程时不保存其他S
8、ET选项(例如SETARITHABORT、SETANSI_WARNINGS或SETANSI_PADDINGS)。如果存储过程的逻辑取决于特定的设置,则应在过程开头添加一条SET语句,以确保设置正确。从存储过程中执行SET语句时,该设置只在存储过程完成之前有效。之后,设置将还原为调用存储过程时的值。这样一来,单个客户端就可以设置所需的选项,而不会影响存储过程的逻辑。注意: 在传递存储过程或用户定义函数中的参数时,或在声明和设置批语句中的变量时,ANSI_WARNINGS的优先级较低。例如,如果一个变量被定义为char(3),但后来将该参数设置为一个大于三个字符的值,则数据
9、将被截断为定义的大小,并且INSERT或UPDATE语句将执行成功。 使用CLR存储过程的参数CLR存储过程的参数可以是标量SQLServer系统数据类型的任何一种。为了使数据库引擎在.NETFramework中被重载时引用正确的方法,中指示的方法必须具有下列特征:声明为静态方法。接收的参数个数与过程的参数个数相同。不能是类的构造函数或析构函数。使用的参数类型与SQLServer过程的相应参数的数据类型兼容。有关将SQLServer数据类型与.NETFramework数据类型匹配的信息,请参阅SQLSe
此文档下载收益归作者所有