博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2013-05-17 11:22  米粒3  阅读(1450)  评论(0编辑  收藏  举报

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)