zoukankan      html  css  js  c++  java
  • [Sql Server][原创]

    [Sql Server][原创]自定义函数汇总 编辑


    >> Sql表值函数

       01、获取指定表名的字段类型信息 > dbo.AH_GetTableColumnType(@TableName)

       02、将传入字符串拿分隔符分开后放到返回表里 > dbo.AH_CharDelimTable(@ParamStr,@DelimStr)

       03、返回字符串 @ParamStr 以 @Delim 字符分隔的元素中 (@MinMax = 1 : 最小数字 | @MinMax = 0 : 最大数字) > Erp.AH_StrMinMaxNumber(@MinMax,@ParamStr,@DelimStr) 

       04、 >

       05、 >

       06、 >

       07、 >

       08、 >

       09、 >

       10、 >

    >> Sql标量值函数

       01、分隔符分隔字符串 > dbo.entry(@idx,@char_expr,@delim)

       02、 >

       03、 >

       04、 >

       05、 >

       06、 >

       07、 >

       08、 >

       09、 >

       10、 >


    >> Sql表值函数 目录

       01、获取指定表名的字段类型信息 > dbo.AH_GetTableColumnType(@TableName) 目录

    /*
        函数: dbo.AH_GetTableColumnType(@TableName)
            
        作用: 获取指定表 @TableName 的字段类型信息到返回表内
    
        测试: select * from dbo.AH_GetTableColumnType('KH_H_ProcExecLog')
    
        结果: 序号    表名                字段名       类型编码    字段类型    字段类型描述    字段长度 精度 小数位
                1    KH_H_ProcExecLog    [ProcName]       231    nvarchar    nvarchar(100)    200         100  NULL
                2    KH_H_ProcExecLog    [ExecUser]       231    nvarchar    nvarchar(100)    200         100  NULL
                3    KH_H_ProcExecLog    [ExecDate]        61    datetime    datetime          8          23     3
                4    KH_H_ProcExecLog    [Conditions]   231    nvarchar    nvarchar(max)     -1          -1   NULL
                5    KH_H_ProcExecLog    [LogRandomID]    56    int            int    4             10           0
                6    KH_H_ProcExecLog    [UserTime]        56    int            int    4             10           0
    
        作者: 辉创1989
        邮箱:929412592@qq.com
          QQ: 929412592
    
    
    */
    
    ALTER Function [dbo].[AH_GetTableColumnType]
    (
        @TableName nvarchar(500)
    )    
    Returns @ColumnTypeTable Table (
        [序号]           decimal(18, 0) identity(1,1) primary key,
        [表名]           nvarchar(50),
        [字段名]         nvarchar(50),
        [类型编码]       int,
        [字段类型]       nvarchar(50),
        [字段类型描述]   nvarchar(50),
        [字段长度]       int,
        [精度]           int,
        [小数位]         int
    )
    As
    begin    
        insert into @ColumnTypeTable(
               [表名],
               [字段名],
               [类型编码],
               [字段长度],
               [精度],
               [小数位]
        )
        select A.name                表名,
               '[' + B.name + ']'    字段名,
               B.xtype               类型编码,
               B.length              字段长度,
               B.prec                精度,
               B.scale               小数位
          from [dbo].[sysobjects] A,[dbo].[syscolumns] B
         where A.id = B.id and A.xtype = 'U'and A.name = @TableName
    
        update @ColumnTypeTable set [字段类型] = B.Name from @ColumnTypeTable A,[dbo].[systypes] B where A.[类型编码] = B.xtype
            
    
        update @ColumnTypeTable set [字段类型描述] = [字段类型] where [字段类型] in ('bit','int','date','datetime','timestamp','uniqueidentifier')
    
        update @ColumnTypeTable set [字段类型描述] = Replace([字段类型] + '(' + cast( [精度] as nvarchar(5)) + ')','-1','max') where [字段类型] in ('nvarchar','nchar')
    
        update @ColumnTypeTable set [字段类型描述] = [字段类型] + '(' + cast( [精度] as nvarchar(5)) + ',' + cast( [小数位] as nvarchar(5)) + ')' where [字段类型] = 'decimal'
        
        return
    end
    查看代码

       02、将传入字符串拿分隔符分开后放到返回表里 > dbo.AH_CharDelimTable(@ParamStr,@DelimStr) 目录

    /*
        函数: dbo.AH_CharDelimTable(@ParamStr,@DelimStr) 
               
        作用: 将传入字符串拿分隔符分开后放到返回表里
    
        测试: select * from dbo.AH_CharDelimTable('A,B,,C,D,D',',')
    
        结果: ParamID ParamValue
                    1    A
                    2    B
                    3    
                    4    C
                    5    D
                    6    E
    
        作者: 辉创1989
        邮箱:929412592@qq.com
          QQ: 929412592
    */
    
    ALTER Function [dbo].[AH_CharDelimTable]
    (
        @ParamStr nvarchar(max),
        @DelimStr nvarchar(20)
    )    
    Returns @CharDelimTable Table (
        ParamID    decimal(18, 0) IDENTITY(1,1) primary key,
        ParamValue nvarchar(max) NULL
    )
    As
    begin
    
        if(Len(@ParamStr) = 0) 
            return
        else
        begin
            if(CharIndex(@DelimStr,@ParamStr) = 0)
            begin
                insert into @CharDelimTable(ParamValue)
                select @ParamStr as ParamValue
            end
            else
            begin
                while(CharIndex(@DelimStr,@ParamStr) > 0)
                begin
                    insert into @CharDelimTable(ParamValue)
                    select SubString(@ParamStr,0,CharIndex(@DelimStr,@ParamStr)) as ParamValue
                    set @ParamStr = SubString(@ParamStr,CharIndex(@DelimStr,@ParamStr)+1,Len(@ParamStr))
                end
    
                insert into @CharDelimTable(ParamValue)
                select @ParamStr as ParamValue
            end
        end
        return
    end
    查看代码

       03、返回字符串 @ParamStr 以 @Delim 字符分隔的元素中 (@MinMax = 1 : 最小数字 | @MinMax = 0 : 最大数字) > Erp.AH_StrMinMaxNumber(@MinMax,@ParamStr,@DelimStr) 目录

    /*
      函数: Erp.AH_StrMinMaxNumber(@MinMax,@ParamStr,@DelimStr)
    
      作用: 返回字符串 @ParamStr 以 @Delim 字符分隔的元素中 (@MinMax = 1 : 最小数字 | @MinMax = 0 : 最大数字)
    
      测试: 
          select Erp.AH_StrMinMaxNumber(1,'0,-9,1,-89,42,u',',') as MinNumber   -- 结果:最小值 -89
          select Erp.AH_StrMinMaxNumber(0,'0,-9,1,89,452,t',',') as MaxNumber      -- 结果:最大值 452
          select Erp.AH_StrMinMaxNumber(0,'0mm','m') as MaxNumber                  -- 结果:最大值 0
    
      返回: Null 表示传入字符串拿分隔符分开后无数字,否则返回字符串中对应最大或最小数字
    
        调用: Erp.AH_CharDelimTable(@ParamStr,@DelimStr) 表值函数 :将传入字符串 @ParamStr 拿分隔符 @DelimStr 分开后放到返回表里
    
        作者: 辉创1989
        邮箱:929412592@qq.com
          QQ: 929412592
    */
    
    Alter function [Erp].[StrMinMaxNumber]
    (
      @MinMax    bit,    
      @ParamStr    nvarchar(max), 
      @DelimStr    nvarchar(1)
    )
    returns int
    as
    begin
      declare @Return    int = 0
    
      if(@MinMax = 1)
        set @Return = (select Min(Cast(ParamValue as int)) from Erp.CharDelimTable(@ParamStr,@DelimStr) where IsNumeric(ParamValue) = 1) 
      else
        set @Return = (select Max(Cast(ParamValue as int)) from Erp.CharDelimTable(@ParamStr,@DelimStr) where IsNumeric(ParamValue) = 1)
    
      return(@Return)
    end
    查看代码

       04、目录

     

       05、目录

     

       06、目录

     

       07、目录

     

       08、目录

     

       09、目录

     

       10、目录

     

    >> Sql标量值函数 目录

       01、分隔符分隔字符串 > dbo.entry(@idx,@char_expr,@delim) 目录

    /*   
        
        函数: dbo.entry(@idx,@char_expr,@delim)
            
        作用: 获取指定字符串 @char_expr 依据分隔符 @delim 分隔后字符列表第 @idx 字符
    
        测试: select * from dbo.select dbo.entry(1,'AC-E300PW-702C','-') 结果:AC
              select * from dbo.select dbo.entry(2,'AC-E300PW-702C','-') 结果:E300PW
              select * from dbo.select dbo.entry(3,'AC-E300PW-702C','-') 结果:702C
    
        作者: 辉创1989
        邮箱:929412592@qq.com
          QQ: 929412592
    */
    
    Alter Function [dbo].[entry](@idx int, @char_expr nvarchar(max), @delim nchar(1))
    returns nvarchar(1000)
    as
    begin
      declare @begin int,@end int,@count int
      declare @str nvarchar(max)
    
      set @count = 1
      set @begin = 1
      set @end = charindex(@delim, @char_expr)
    
      if @idx <= 0 return (NULL)
      if (@end = 0) and @idx > 1 return (NULL)
      if (@end = 0) and @idx = 1 return @char_expr
    
      set @str = @char_expr
      while charindex(@delim, @str) > 0 and @count < @idx
      begin
        set @begin = charindex(@delim, @str) + 1
        set @str = substring(@str, @begin, len(@str) - @begin + 1)
        set @count = @count + 1
      end
    
      if @count < @idx return (NULL)
      if charindex(@delim, @str) > 0
        set @str = substring(@str, 1, charindex(@delim, @str) - 1)
      else
        set @str = substring(@str, 1, len(@str))
      return (@str)
    end
    查看代码

       02、目录

     

       03、目录

     

       04、目录

     

       05、目录

     

       06、目录

     

       07、目录

     

       08、目录

     

       09、目录

     

       10、目录

     
    博客标明【原创】的文章都是本人亲自编写内容! 如有需要转载, 请标明出处:辉创1989(http://www.cnblogs.com/ahui1989/),届时非常感谢! 文章分享在此,希望我之原创有帮到你们! 如有不足之处也可联系我,以便我们共同探讨! 本人现职为Epicor10 系统 开发维护工作,如有需要可共同探讨相关技术知识及经验总结! QQ:929412592
  • 相关阅读:
    vivado 连接不上板子 There is no current hw_target
    excel 方框打钩
    2019新个税如何计算
    printf("loops %u / %u%c[K ", loops + 1, opts->loops, 27); printf("%cM", 27);
    HttpUtil
    Spring注入bean和aop的注意事项
    获取所有bean的名字
    不可见类有抽象父类,spring配置子类bean,注入父类,aop就可以切父类的方法
    实例/静态工厂方法得到bean
    注入抽象类的子类
  • 原文地址:https://www.cnblogs.com/ahui1989/p/7649280.html
Copyright © 2011-2022 走看看