UDF_表值函数与标量函数的区别_分割字符串成单个的字符并返回表(插入到表中)

UDF_区别_分割字符串成单个的字符并返回表(插入到表中)

/*
        SQL表值函数和标量值函数的区别
        实验环境:SQL Server 2014,参考maomao365有改编        
        在sqlserver中存储过程中,我们经常需要编写一个sql函数供存储过程使用,加强代码的复用性,

        存储过程中函数有两种:
        1.返回一张数据表的sql函数,我们称之为“表值函数”
        2.返回一个指定数值的sql函数,我们称之为“标量值函数”
        那么这两种sql函数,最大和唯一的区别为:返回类型不一样      
*/
---------------------------------------------------------------------------------------------
--定义了一个表值函数,此函数可以返回符合id等于参数的所有行信息  
--DROP FUNCTION fn_testReturnTable
GO
  create  function  fn_testReturnTable
   (
        @id int
   )
    RETURNS @t TABLE 
    (
         id int,Name sysname
    )
AS
BEGIN
     insert into @t(id,name)
      select id,name from sysobjects where id =@id 
    RETURN 
END
/*
        查看是否执行在该库下,有时切换数据库以后,执行到其他库下了
        --sp_helptext fn_testReturnTable          
        SELECT * FROM fn_testReturnTable(5)

*/

---------------------------------------------------------------------------------------------
--定义了一个标量值函数,此函数可以返回符合id等于参数的所有行的name信息。   
Create  FUNCTION  fn_testReturnTable
(
    @id int
)
RETURNS nvarchar(256)
AS
BEGIN
    declare @name nvarchar(256)
    select @name=name  from sysobjects where id =@id 
    return @name
END

/*
       SELECT * FROM fn_testReturnTable(5)
*/
---------------------------------------------------------------------------------------------
--函数功能:拆分字符串为单个字符,放入数据表中,并返回
/*
   将字符串分解为单个字符串的方法
*/  
--drop function fn_SplitStringToCharReturnTable
GO
CREATE FUNCTION dbo.fn_SplitStringToCharReturnTable
(
     @str NVARCHAR(MAX)
)
RETURNS @tmp TABLE
(
        --[t] [NVARCHAR](2) NULL
        [tb_ReturnTable] [NVARCHAR](2) NULL
)
AS 
BEGIN
     DECLARE @p INT=1,@strlen INT=LEN(@str)    --@p计数器,@strlen,函数中参数的长度
     WHILE @p <= @strlen
     BEGIN
          INSERT @tmp VALUES(substring(@str,@p,1))
          SET @p = @p + 1
     END
     RETURN
END
/*  
      调用
      SELECT [tb_ReturnTable] from dbo.fn_SplitStringToCharReturnTable('GraceLin is a beautiful girl and she lives in ZS.')
*/

 

--大致的写法就是这种结构(此时暂时称为语法吧)
--表值型函数定义
   create function dbo.fn_test(
      @a int,@b int
       )
     returns table
     as 
     begin
        declare @tmp table(keyid int,info varchar(30)) 
         /*sql脚本*/
          
         return @tmp
     end
  --标量型函数定义
create function dbo.fn_test(
      @a int,@b int
       )
     returns int
     as 
     begin
        declare @tmp int 
         /*sql脚本*/
          
         return @tmp
     end
  

 --修改自定义函数方法,只需将create 变更为alter 
 --输入相关的脚本内容即可
 alter function dbo.fn_test(
      @a int,@b int
       )
     returns int
     as 
     begin
        declare @tmp int 
         /*sql脚本*/
          
         return @tmp
     end
  
  --删除自定义函数的方法
  drop function dbo_fn_test

 

posted @ 2020-06-10 16:43  CDPJ  阅读(242)  评论(0编辑  收藏  举报