SQL-自定义函数
最近项目中的数据列表越来越复杂,写一条语句太过长而冗余,并且一定修改,极容易不小心修改到,出错了又要花大量时间去排查,基于这种原因,我找到了通过写SQL函数来解决这一难题---20170714姜彦
函数,跟存储过程一样,都是一段特定方法的逻辑集合,介于篇幅的重点,在这篇文章里,就不对此二者进行对比分析了,我们重点通过实例才理解和使用一个函数。
上图是写好生成的函数所在的地方。
点击修改可以查看、修改函数的内容。
USE [SHDQ_MGM1000_TEST] GO /****** Object: UserDefinedFunction [dbo].[FnSamepleValues] Script Date: 2017/7/14 18:30:16 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[FnSamepleValues]( @String nvarchar (max) ) RETURNS @ValueTable TABLE ([id] int,[Flag] NVARCHAR(32),[FlagValue] NVARCHAR(32)) BEGIN DECLARE @NextString nvarchar(max), @FlagString nvarchar(32), @ValueString nvarchar(32), @Pos int, @Pos2 int, @NextPos int, @CommaCheck nvarchar(1), @id int, @Delimiter nvarchar(1), @Delimiter2 nvarchar(1) set @id=1 SET @NextString = '' SET @FlagString = '' SET @ValueString = '' SET @Delimiter = ',' SET @Delimiter2 = ':' SET @CommaCheck = right(@String,1) SET @String = @String + @Delimiter SET @Pos = CHARINDEX(@Delimiter,@String) SET @NextPos = 1 WHILE (@pos <> 0) BEGIN SET @NextString = SUBSTRING(@String,1,@Pos - 1) SET @Pos2 = CHARINDEX(@Delimiter2,@NextString) SET @FlagString = SUBSTRING(@NextString,1,@Pos2 - 1) SET @ValueString = SUBSTRING(@NextString,@Pos2+1,LEN(@NextString)) INSERT INTO @ValueTable ([id],[Flag],[FlagValue]) VALUES (@id,@FlagString,@ValueString) SET @String = SUBSTRING(@String,@pos +1,LEN(@String)) SET @NextPos = @Pos SET @pos = CHARINDEX(@Delimiter,@String) set @id = @id +1 END RETURN END
然后,在么引用呢?如下
SQL执行语句
declare @returnSampleValues varchar(max) set @returnSampleValues=(select SampleValues from TYcHistory_201707 where SampleTime=(select max(SampleTime) from TYcHistory_201707 where cast(SampleTime as date)='2017/07/06 0:00:00') ) SELECT * FROM dbo.[FnSamepleValues](''+@returnSampleValues+'') where Flag='c112'
执行结果
函数的介绍:
1.创建函数:Create function 函数名(参数)
2.修改函数:Alter function 函数名(参数)
3.删除函数:drop function函数名称
本章先简单写到这里
您的资助是我最大的动力!
金额随意,欢迎来赏!
我写的东西能让你能懂,那是义务
毕竟占用了你生命中的宝贵的时间和注意力
要是你还能喜欢我的作品,那就是缘分了
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【青青子衿】!