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)