在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知识。