sqlserver&c# 存储过程字符长度过长处理

过长字符串参数的处理  根据某个字符串分割

此处只针对  像一般拼接id字符串这样的参数,例:    1,2,3,4 

主要处理这样的业务逻辑缩写的方法,可以解决这样的字符串长度过长,导致存储过程参数超过长度。

如果是其他的需求,也可以按照这个思路,先把字符串存储在一张表中,用的时候把查询语句当参数传入存储过程,这样就不会很长了

 

首先创建一张 需要存放过长字符串的表TempMaxString

字段: TableId    InsertTime     MaxString

 

 

//底层方法  (静态直接引用)

 public static string SqlToTempMaxString(this string tb, string splitString)

        {

            if (tb.Length <= 600)       //如果字符串超过一定长度

                return tb;

            else   //长度超过600  则使用函数

            {

                //此处插入数据库  获取表id

                int TempMaxStringTableId = BLLLogicLinkLearnHelper.TempMaxStringLogic.Insert(new TempMaxStringInfo()

                {

                    InsertTime = DateTime.Now,

                    MaxString = tb

                });

                //此处用了一个函数处理字符串(最终存储过程传入的参数是下面这句sql)

                return string.Format("select c1 from dbo.func_splitstring((select MaxString  from TempMaxString where TableId = {0}),'{1}')", TempMaxStringTableId, splitString);

            }

        }

 

 

 

函数脚本:   (执行就创建)

/****** Object:  UserDefinedFunction [dbo].[func_splitstring]    Script Date: 2019/8/28 10:52:29 ******/

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

 

CREATE function [dbo].[func_splitstring]

(@str nvarchar(max),@split varchar(10))

returns @t Table (c1 varchar(100),OrderId int)

as

begin

    declare @i int,@index int,@s int

    set @index = 1

    set @i=1

    set @s=1

    while(@i>0)

    begin    

        set @i=charindex(@split,@str,@s)

        if(@i>0)

        begin

            insert @t(c1,OrderId) values(substring(@str,@s,@i-@s),@index)

set @index = @index + 1

        end   

        else begin

            insert @t(c1,OrderId) values(substring(@str,@s,len(@str)-@s+1),@index)

            set @index = @index + 1

        end

        set @s = @i + LEN(@split)  

    end

    return

end

GO

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值