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)

相关文章:

  • 2021-11-15
  • 2021-11-27
  • 2021-06-16
  • 2022-01-05
  • 2022-12-23
  • 2021-12-27
  • 2022-12-23
猜你喜欢
  • 2021-12-23
  • 2021-09-05
  • 2021-11-03
  • 2022-12-23
  • 2022-12-23
  • 2021-06-28
相关资源
相似解决方案