存储进程与函数的界别,SQL中积存进度和函数的区分

         

壹.创设函数、查找函数

 

997755.com澳门葡京,真相上没分别。

997755.com澳门葡京 1

实质上没分别。只是函数有如:只可以回去3个变量的限定。而存款和储蓄进度能够回来多个。

只是函数有如:只好回去一个变量的限定。而存款和储蓄进程能够回到八个。而函数是足以放置在sql中运用的,能够在select中调用,而存储进程不行。执行的原形都一致。
存储进程与函数的界别,SQL中积存进度和函数的区分。函数限制比较多,比如不可能用目前表,只可以用表变量.还有部分函数都不可用等等.而存储进程的限量相对就比较少

/*创建带参数的函数,返回单个*/
CREATE FUNCTION [dbo].[GETGrade](@userName nvarchar(10),@subject nvarchar(10))
returns nvarchar(10)
as begin

declare @grade nvarchar(10)

if @userName='张三'
   set @grade=(select [source] from TestRows2Columns where username=@userName and [subject]=@subject)

if @userName='李四'
   set @grade=(select [source] from TestRows2Columns where username=@userName and [subject]=@subject)

if @userName='王五'
   set @grade=(select [source] from TestRows2Columns where username=@userName and [subject]=@subject)
return @grade

end

而函数是能够放手在sql中选择的,能够在select中调用,而存款和储蓄进度至极。

1.    
一般的话,存款和储蓄进度完成的效益要复杂一点,而函数的兑现的意义针对性相比较强。
二.     对于仓库储存过程来说能够回来参数,而函数只可以重返值也许表对象。
三.    
存款和储蓄进度相似是当做二个独自的一对来进行,而函数能够视作查询语句的二个有个别来调用,由于函数能够再次回到三个表对象,由此它能够在查询语句中位居FROM关
键字的末尾。
四.     当存款和储蓄进度和函数被实施的时候,SQL Manager会到procedure
cache中去取相应的询问语句,假若在procedure
cache里未有对应的查询语句,SQL Manager就能够对存款和储蓄进度和函数进行编写翻译。
Procedure cache中保留的是施行安插 (execution plan)
,当编写翻译好之后就举办procedure cache中的execution plan,之后SQL
SE昂CoraVECRUISER会依照每一种execution
plan的实在情状来设想是还是不是要在cache中保存那些plan,评判的正式二个是那个execution
plan大概被采纳的频率;其次是生成那一个plan的代价,也正是编写翻译的耗费时间。保存在cache中的plan在下次施行时就不要再编写翻译了。

实施函数

施行的恒山真面目都一点差异也未有。 
     函数限制相比多,比如不可能用一时表,只可以用表变量.

select dbo.GETGrade('张三','语文')

  还有部分函数都不可用等等.而存储进程的限量相对就比较少 

997755.com澳门葡京 2

    1.   
一般的话,存款和储蓄进程达成的法力要复杂一点,而函数的落到实处的机能针对性比较强。 
      贰.   
对于仓库储存进度来讲能够回到参数,而函数只好重回值只怕表对象。 
      三.    存款和储蓄进度一般是作为三个独自的部分来进行(EXEC推行),

回来表函数

    而函数可以看做查询语句的三个部分来调用(SELECT调用),由于函数能够回去几个表对象,

/*创建函数,返回表*/
CREATE  FUNCTION  GETGrade2(@userName nvarchar(10),@subject nvarchar(10))
RETURNS @TempTable TABLE(userName nvarchar(10),subject nvarchar(10),[Source] nvarchar(50))
AS  
BEGIN
INSERT INTO @TempTable(userName,[subject],[Source])
SELECT [UserName],[Subject],[Source]  from [TestRows2Columns] where username=@userName and [subject]=@subject
RETURN 
END

    因而它能够在查询语句中位居FROM关键字的前面。 
      肆.    当存款和储蓄进度和函数被施行的时候,SQL Manager会到procedure
cache中去取相应的询问语句,假使在procedure
cache里未有相应的查询语句,SQL Manager就能够对存款和储蓄进程和函数实行编译。 
      Procedure cache中保留的是实施安插 (execution plan)
,当编写翻译好之后就施行procedure cache中的execution plan,之后SQL
SETiguanVE奥迪Q7会依据各样execution
plan的骨子里情况来思量是或不是要在cache中保留那个plan,评判的正统七个是那几个execution
plan恐怕被应用的功效;其次是生成那几个plan的代价,相当于编写翻译的耗费时间。保存在cache中的plan在下次施行时就无须再编写翻译了。

施行函数

SELECT * from dbo.GETGrade2('张三','语文')

997755.com澳门葡京 3

创建积攒进程、查找积存进程

CREATE PROC P_View(@userName nvarchar(10),@subject nvarchar(10))
AS
BEGIN
SELECT * FROM TestRows2Columns where username=@userName and [subject]=@subject
END

奉行储存进程

EXEC P_View '李四','数学'

997755.com澳门葡京 4

本质上没不一致。只是函数有如:只好回到一个变量的界定。而存款和储蓄过程能够回来多个。而函数是足以放手在sql中动用的,能够在select中调用,而存款和储蓄进度万分。实践的真面目都如出1辙。 
    
函数限制比较多,比方不能够用一时表,只好用表变量.还有一对函数都不可用等等.而存款和储蓄进度的界定相对就相比较少 
      一.   
一般的话,存储进度完毕的功能要复杂一点,而函数的得以达成的职能针对性比较强。 
      贰.   
对于仓库储存过程来讲能够重回参数,而函数只好再次回到值或许表对象。 
      叁.   
存款和储蓄进程一般是用作三个独自的一对来进行(EXEC实行),而函数能够视作查询语句的叁个某个来调用(SELECT调用),由于函数能够重回3个表对象,由此它可以在查询语句中位居FROM关键字的末尾。 
      四.    当存款和储蓄进度和函数被施行的时候,SQL Manager会到procedure
cache中去取相应的查询语句,假设在procedure
cache里未有对应的询问语句,SQL Manager就能够对存款和储蓄进程和函数进行编写翻译。 
      Procedure cache中保留的是进行陈设 (execution plan)
,当编写翻译好之后就实行procedure cache中的execution plan,之后SQL
SESportageVE翼虎会依据各个execution
plan的实际情形来设想是否要在cache中保留这么些plan,评判的正规2个是其1execution
plan大概被运用的频率;其次是生成那个plan的代价,也正是编写翻译的耗费时间。保存在cache中的plan在下次实践时就不用再编写翻译了。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website