存储过程和自定义函数的区别

1:

1)存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。

自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)存储过程,可以使用非确定函数。

自定义函数,不允许在用户定义函数主体中内置非确定函数。

3)存储过程,主要是返回一个int状态结果,也可返回记录集。

自定义函数,可以返回表变量。

关于这个,很容易糊涂。存储过程,可以使用这样的形式来返回N多的结果:

create procedure sp1  
as   
begin  
select name, fid_fk from table_1  
print ‘111‘  
select testname ,fid  from table_2  
end  
create procedure sp1 as begin select name, fid_fk from table_1 print ‘111‘ select testname ,fid from table_2 end

[表1]

而这个结果,只能以两种形式被使用:insert into table_3(name, fid_fk) exec sp1; 或者 EXEC sp1.

不过,对于自定义函数,它必须指定定义为返回值为table类型的数据@t,并且在代码中显式的向该table @t中insert;或者,只是制定返回值为table类型,不指定return 的对象变量,直接return 该表。即:

create function fn1()   
returns table  
as  
return select fid, testname  from table_2   
create function fn1() returns table as return select fid, testname from table_2

[表2]

或者

create function fn1()   
returns @v table  
(fid int primary key not null,  
testname nchar(10))  
as  
begin  
  insert into @v select  fid,testname  from table_2   
end  
create function fn1() returns @v table (fid int primary key not null, testname nchar(10)) as begin insert into @v select fid,testname from table_2 end 
[表3]

在这个方面,最能够看出存储过程和自定义函数的区别:前者是一系列功能的集合,可以返回int值,或者返回查询的结果集合,但是只是作为一系列功能的副产品;而后者,就是为了返回值而创建的。在【附录】中详细说明自定义函数的使用。

4)存储过程,其返回值不能被直接引用;而是必须被使用为exec sp1或者 insert into table 的形式使用。

自定义函数,其返回值可以被直接引用。

5)存储过程,用 EXECUTE 语句执行。

自定义函数,在查询语句中调用。

【附录】最后补充一下。

我ft,破csdn,整个格式都不会,不知道干嘛的。不过还是言归正传。

一般说来,自定义函数就有这三个用处:

1,如上[表2],返回一个in-line table value;

2,如上[表3],返回一个multi statement table value;

3,仅仅返回一个任意的变量,比如:

Create Function CubicVolume  
(@CubeLength decimal(4,1),@CubeWidth decimal(4,1),@CubeHeight decimal(4,1) )  
Returns decimal(12,3)  
As  
Begin  
Return (@CubeLength * @CubeWidth * @CubeHeight)  
End 
原文地址:http://blog.csdn.net/sandyzhs/article/details/3049678#

2.

SQL中的存储过程,函数,视图有什么区别?

存储过程是预先写好并编译好的SQL程序
函数预先写好的代码片断,有系统函数,也有自定义函数
视图是预先建立的查询语句,用起来就像使用表一样了

存储过程需要单独执行,函数可以随处调用,视图是一种直观的表现方式~

原文地址:http://zhidao.baidu.com/question/130756796.html

3.

时间: 2024-10-07 19:01:32

存储过程和自定义函数的区别的相关文章

MySQL存储过程/存储过程与自定义函数的区别

语法: 创建存储过程: CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body 其中: proc_parameter : [IN|OUT|INOUT] parameter_name type 其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出:param_name

(转)MySQL存储过程/存储过程与自定义函数的区别

转自:http://www.cnblogs.com/caoruiy/p/4486249.html 语法: 创建存储过程: CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body 其中: proc_parameter : [IN|OUT|INOUT] parameter_name type

转:存储过程和自定义函数的区别

首先来看一下存储过程和自定义函数的概念 一. 什么是存储过程? 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理. 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能. 存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数. 返回单个或多个结果集以及返回值. 可以出于任何使用SQL 语句的目的来使用存储过程

SQL中存储过程和自定义函数的区别(转载)

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程和自定义函数的区别

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL中存储过程与自定义函数的区别

存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 优点 ①重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. ②提高性能.存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译.一般的SQL语句每

存储过程与自定义函数的区别

oracle存储过程和自定义函数

create [or replace] PRocedure 过程名(参数列表) AS PLSQL 子程序体; 存储过程写完之后,要调用这个存储过程; 有两种方法: 1.exec 存储过程名(); 2.PL/SQL begin 存储过程名(); end; / 如何调试和运行PL/SQL 语句; 进入debeg 模式 函数(Function)为一命名的存储程序;可带参数,并返回一计算值:用PL/SQL 语句的写的程序; 函数和过程的结构类似,但是必须有一个RETURN 子句,用于返回函数值; cre

存储过程 <3> 和函数的区别

二.函数和存储过程的优点: 1.共同使用的代码可以只需要被编写一次,而被需要该代码的任何应用程序调用(.net,c++,java,也可以使DLL库). 2.这种几种编写.几种维护更新.大家共享的方法,简化了应用程序的开发维护,提高了效率和性能. 3.这种模块化的方法使得一个复杂的问题.大的程序逐步简化成几个简单的.小的程序部分,进行分别编写,因此程序的结构更加清晰,简单,也容易实现. 4.可以在各个开发者之间提供处理数据.控制流程.提示信息等方面的一致性. 5.节省内存空间.它们以一种压缩的形式