最近项目中的数据列表越来越复杂,写一条语句太过长而冗余,并且一定修改,极容易不小心修改到,出错了又要花大量时间去排查,基于这种原因,我找到了通过写SQL函数来解决这一难题---20170714姜彦

     函数,跟存储过程一样,都是一段特定方法的逻辑集合,介于篇幅的重点,在这篇文章里,就不对此二者进行对比分析了,我们重点通过实例才理解和使用一个函数。

    SQL-自定义函数

 

    上图是写好生成的函数所在的地方。

 

  SQL-自定义函数

 

SQL-自定义函数

 

点击修改可以查看、修改函数的内容。

 

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' 

执行结果

SQL-自定义函数

 

 

函数的介绍:

1.创建函数:Create function 函数名(参数)

2.修改函数:Alter function 函数名(参数)

3.删除函数:drop function函数名称

 

本章先简单写到这里

 

 

 

   

 

相关文章:

  • 2021-10-25
  • 2021-12-13
  • 2021-10-25
  • 2022-03-01
猜你喜欢
  • 2021-11-19
  • 2022-12-23
  • 2021-06-17
  • 2021-12-26
  • 2021-11-11
相关资源
相似解决方案