66:创建无参数无返回值的存储过程(存储过程的默认返回值都是int类型的,并且为0)create proc myaasselect*from ordersgoexec mya67:删除存储过程Drop proc 存储过程名称,如果多个用,号进行分割。
68:创建有参数但无返回值的存储过程create proc myb@param int= 1asselect*from orders where oid > @paramgoexec myb 369:调用以上俩个存储过程,并查看默认返回值declare @number intset @number = 1;exec @number = myaexec @number = myb 3print @numbergo70:获取存储过程的返回值(存储过程默认的返回值都为0)declare @number intset @number = 1exec @number = myaexec @number = mybprint @number71:创建有参数并且有返回值的存储过程,并调用存储过程,获取返回值select*from person;go--create proc myc--@inparm int,--@outparm int output--as--select @outparm=count(*) from person where pid>@inparm--godeclare @flag intset @flag = 2exec myc @outparm = @flag output,@inparm = 1if(@flag>0)beginprint @flagendelsebeginprint'set is null'endgo--1 调用方法:--1:不要返回值return,的俩种写法--2:计算参数总共有多少个输出参数,有多少个输出参数,就需要有多少个变量,output不能少--创建存储过程时,注意,sql中引用表必须在当前数据库中存在,否则调用不成功--存储过程与use 间必须用批处理命令 go 去隔开72:手工改变存储过程的返回值create proc myaasselect*from personreturn 888godeclare @flag intset @flag = 0exec @flag = myaprint @flagcreate proc myaasdeclare @flag intset @flag = 0select @flag =count(*)from personreturn @flaggodeclare @number intset @number = 0exec @number = myaprint @number73:存储过程综合应用:create proc mya@inparm int,@outparm int outputasselect @outparm =count(*)from person where pid>@inparmif(@outparm>0)beginreturn @outparmendelsebeginreturn 0enddeclare @number intset @number =0exec mya @outparm = @number output,@inparm =1print @numbergo15:什么是存储过程?procedure◆存储过程是指封装了可重用代码的模块或例程◆存储过程是一个命名的存储在服务器上的预编译T-SQL语句集合◆存储过程在创建时就被编译和优化,调用一次以后,相关信息就保存在内存中,下次调用时可以直接执行◆用来执行管理任务或实现复杂的业务规则◆存储过程可以带参数,也可以返回结果,可以包含数据操纵语句、变量、逻辑控制语句等16:存储过程的特点是?存储过程特点:1:有名称,可以在客户端通过名称直接调用2:已经编译好了,提高访问效率17:存储过程的优点●存储过程具有对数据库立即访问的功能。
●可以加快程序的执行速度●可以减少网络流量●提高系统安全性●实现了模块化编程●提高代码的重用性,一次编译,相关信息就保存在内存中,下次调用时可以直接执行。
18:存储过程的分类●系统存储过程由系统定义,存放在master数据库中类似C语言中的系统函数系统存储过程的名称都以“sp_”开头或”xp_”开头●用户自定义存储过程由用户在自己的数据库中创建的存储过程类似C语言中的用户自定义函数19:如何创建存储过程存储过程的参数分两种:输入参数用于向存储过程传入值输出参数用于在调用存储过程后,返回结果•定义存储过程的语法CREATE PROC[EDURE] 存储过程名@参数in 数据类型= 默认值,@参数out 数据类型OUT [ PUT ][ ,...n ]ASSQL语句GO20:存储过程生成过程:创建—>解析——>优化-→编译-→编译过的执行计划放入过程缓存function和procedure在宏观区别2010-06-06 13:55函数是用在表达式中,在一个存储过程中可能用到多个的函数函数适用于复杂的统计与计算,最终将结果返回(必须要有返回值)。
select 函数名[(parameters)] from dual;来测试函数存储过程更适合对数据库的更新,尤其是大量数据的更新。
好处:提高程序执行效率(连接DB耗时和消耗系统资源,如果将所有操作都交由一个存储过程来操作,则大大降低了连接数据库的频率,提高执行效率);可以提高系统安全性(做为对象存储在数据库中,可以通过对存储过程分配权限,来控制整个操作的安全性。
实现数据库操作由编程语言转移到数据库,只要数据库不遭到破坏,这些操作都会被保留下来。
);可复用性;存储过程不要求有返回值,但可以有参数,输入参数、输出参数、输入输出参数。
程序包可以将若干个函数或者存储过程组织起来,作为一个对象进行存储。
程序包通常由两部分构成:规范(specification)和主体(body)。
程序包也可以包含常量和变量,包中的所有函数和存储过程都能够使用这些变量和常量。
函数、存储过程、程序包这些对象都存储数据字典中表user_objects查询方法:select object_name,object_type,status from user_objects where lower(OBJECT_NAME)='名称';对于程序包中的函数,可以直接在select语句进行调用。
调用的格式为package_name.function_name().以调用程序包pkg_students中的函数get_student_string()为例,相应的代码如下表示:select pkg_students.get_student_string() from dual;用户定义函数,它是返回值的已保存的Transact-SQL 例程。
用户定义函数不能用于执行一组修改全局数据库状态的操作。
与系统函数一样,用户定义函数可以从查询中唤醒调用。
也可以像存储过程一样,通过EXECUTE 语句执行。
未在下面的列表中列出的语句不能用在函数主体中。
赋值语句。
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。
只允许使用以INTO 子句向局部变量赋值的FETCH 语句;不允许使用将数据返回到客户端的FETCH 语句。
INSERT、UPDATE 和DELETE 语句,这些语句修改函数的局部table 变量。
EXECUTE 语句调用扩展存储过程。
函数的确定性和副作用函数可以是确定的或不确定的。
如果任何时候用一组特定的输入值调用函数时返回的结果总是相同的,则这些函数为确定的。
如果每次调用函数时即使用的是相同的一组特定输入值,返回的结果总是不同的,则这些函数为不确定的。
不确定的函数会产生副作用。
副作用是更改数据库的某些全局状态,比如更新数据库表或某些外部资源,如文件或网络等(例如,修改文件或发送电子邮件消息)。
不允许在用户定义函数主体中内置不确定函数;这些不确定函数如下:@@CONNECTIONS @@TOTAL_ERRORS@@CPU_BUSY @@TOTAL_READ@@IDLE @@TOTAL_WRITE@@IO_BUSY GETDATE@@MAX_CONNECTIONS GETUTCDATE@@PACK_RECEIVED NEWID@@PACK_SENT RAND@@PACKET_ERRORS TEXTPTR@@TIMETICKS尽管在用户定义函数主体中不允许有不确定函数,这些用户定义函数在调用扩展存储过程时仍会产生副作用。
由于扩展存储过程会对数据库产生副作用,因此调用扩展存储过程的函数是不确定的。
当用户定义函数调用会对数据库产生副作用的扩展存储过程时,不要指望结果集保持一致或执行函数。
从函数中调用扩展存储过程从函数内部调用时扩展存储过程无法向客户端返回结果集。
任何向客户端返回结果集的ODS API 都将返回FAIL。
扩展存储过程可以连接回Microsoft® SQL Server™;但是,它不应尝试联接与唤醒调用扩展存储过程的函数相同的事务。
与从批处理或存储过程中唤醒调用相似,扩展存储过程在运行SQL Server 的Windows® 安全帐户的上下文中执行。
存储过程的所有者在授予用户EXECUTE 特权时应考虑这一点。
麦当劳的存储过程!研究研究很有价值!。