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函数名称

 

本章先简单写到这里

 

 

 

   

 

posted @ 2017-07-14 18:40  <--青青子衿-->  阅读(681)  评论(0编辑  收藏  举报
// /**/ // 在页脚Html代码 引入 // function btn_donateClick() { var DivPopup = document.getElementById('Div_popup'); var DivMasklayer = document.getElementById('div_masklayer'); DivMasklayer.style.display = 'block'; DivPopup.style.display = 'block'; var h = Div_popup.clientHeight; with (Div_popup.style) { marginTop = -h / 2 + 'px'; } } function MasklayerClick() { var masklayer = document.getElementById('div_masklayer'); var divImg = document.getElementById("Div_popup"); masklayer.style.display = "none"; divImg.style.display = "none"; } setTimeout( function () { document.getElementById('div_masklayer').onclick = MasklayerClick; document.getElementById('btn_donate').onclick = btn_donateClick; var a_gzw = document.getElementById("guanzhuwo"); a_gzw.href = "javascript:void(0);"; $("#guanzhuwo").attr("onclick","follow('33513f9f-ba13-e011-ac81-842b2b196315');"); }, 900);