您的位置:首页 > 其它

标量值函数定义 和 使用实例

2013-05-17 11:22 393 查看
CREATE FUNCTION 自定义函数名(
自定义参数

)
RETURNS 返回值类型

AS
BEGIN

--声明返回值

DECLARE <@ResultVar, sysname, @Result> <Function_Data_Type, ,int>

-- 通过查询给返回值赋值

SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>

-- return返回值

RETURN <@ResultVar, sysname, @Result>

END

***************************************实例***************************************

定义:

USE [MyTest]
GO
/****** Object: UserDefinedFunction [dbo].[FunGetMatByAtrID] Script Date: 01/09/2012 11:24:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: zyp
-- Create date: 2012-01-09
-- Description:
-- =============================================
ALTER FUNCTION [dbo].[FunGetMatByAtrID]
(
@atrid int
)
RETURNS nvarchar(500)
AS
BEGIN
declare @strTemp nvarchar(500)
declare @strReturn nvarchar(500)

--内部变量的定义之间是不需要逗号 或者 分号分隔的哦

--注意表的定义,要初始化这个表的字段。如果写成declare @temp table这是有问题的哦。
declare @temp table(rowid int,title nvarchar(100))
declare @i int

--注意:这里有几个初始值赋值:

--@i无可非议,要从第一个开始。

--@strTemp和@strReturn这两个参数,因为后边涉及到字符串的拼接,一定要赋初始值为'',否则最后怎么拼,都是NULL。
set @i = 1;
set @strTemp = '';
set @strReturn = '';

--这里也相当于是初始值赋值,不过是某个表的数据插入:

--在函数里,应该是不能用临时表的。所以这里借助了另外一个表值函数。
insert into @temp
select rowid,title from dbo.FunGetMaterialList(@atrid);

while(@i <= (select COUNT(1) from @temp))
begin
select @strTemp = title from @temp where rowid=@i;
set @strReturn = @strReturn + @strTemp + ',';
set @i = @i + 1;
end
set @strReturn = SUBSTRING(@strReturn,1,LEN(@strReturn)-1);

return @strReturn;
END

标量值函数的调用:

select dbo.[FunGetMatByAtrID](1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: