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
OnionYang@