带参数的存储过程和标量Function

在SQL Server中,我们通常会使用NEWID(),GETDATE(),等一些数据库函数,这些函数是很有帮助的,然后数据库也能够让我们自己写函数,即Function,下面简单说说Function的写法。

标量函数:结果为一个单一的值,可包含逻辑处理过程。其中不能用getdate()之类的不确定性系统函数.

CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName>
(
  -- 添加你的参数,及其数据类型
  @Parameter1 DataType,

  @Parameter2 DataType

)

-- 声明你返回值类型
RETURNS DataType
AS
BEGIN
  -- 声明你的返回参数

  DECLARE @ReturnValue DataType

  --可以调用你设定的参数进行逻辑运算

  SET @ReturnValue = @Parameter1 + @Parameter2

  -- Return 返回你想要返回的数
  RETURN @ReturnValue

END
GO

-----------------------------------------------------

在这种标量函数中,无法使用INSERT语句,我甚至想用SELECT 来设定参数值都不行,具体原因没有查,但是报错信息是

:Select statements included within a function cannot return data to a client.

这个以后有时间去研究研究原理。

 

由于项目需要我通过数据库来执行INSERT 语句,Function没法满足我,转战存储过程。

由于接触不多,我并不是太了解存储过程和Function的区别于意义是什么,我只感觉到,存储过程也能设定参数,除了return只能返回INT类型比较操蛋,好像是比Function强。之后得好好研究........

 

CREATE PROCEDURE ProcedureName
  -- 添加输入参数(无需逗号分离),在数据类型后加上OUTPUT属性后,可以输出这个参数
  @Parameter1 DataType OUTPUT

  @Parameter2 DataType
AS
BEGIN
  -- SET NOCOUNT OFF/ON  ON表示执行的SQL不返回具体的影响行数,OFF则返回影响行数
  SET NOCOUNT OFF;

  --声明内部常量(需要逗号分离)

  Declare @Parameter3 DataType,

  Declare @Parameter4 DataType

  --给内部常量赋值(可以用select 语句 查询想要的值)

  SET @Parameter3 = select Value from Table

  --开始执行你想要执行的DML语句

  insert/update/delete

  --记得给你想要OUTPUT的参数赋值(可以使用SQL Server 自带的函数去计算一些东西)

  SET @Parameter2 = select.......
END
GO

--------------------------------------------------------

该存储过程设定了我想要的参数,那么我执行该存储过程,要添加参数值,就可以这样做

Declare @Value

exec ProcedureName @Parameter1, @Value OUTPUT

Print @Value

当执行完以上语句时,你就看到你想要的OUTPUT值。

 

其中目的已经达到,但是有些原理还没有彻底了解,这些需要我花时间查找更多资料,此例仅供大致写出功能模块,要想彻底掌握,还需要了解更多的SQL知识。

 

你可能感兴趣的:(function)