生成編碼規則調整處理T SQL語句的函式

2021-09-08 03:38:22 字數 2791 閱讀 1937

create function dbo.f_changecoderule(

@old_coderule  varchar(50),  --以逗號分隔的舊的編碼規則,每層編碼的長度,比如1,2,3,表示有三層編碼,第一層長度為1,第二層長度為2,第三層長度為3

@new_coderule varchar(50),   --以逗號分隔的舊的編碼規則,如果某個層次的編碼長度為0,表示刪除該層編碼

@charfill       char(1),     --擴充編碼時,填充的字元

@position       int,         --為0,從編碼的最前面開始壓縮或者填充,為-1或者大於舊編碼的長度,從最後一位開始處理,為其他值,從指定的位置後開始處理

@fieldname     sysname       --編碼欄位名

)returns nvarchar(4000)

asbegin

if isnull(@charfill,'')='' set @charfill=n'0'

declare @old_code table(id int identity,codelen int,codelens int,code nvarchar(200))

declare @new_code table(id int identity,codelen int)

--插分舊編碼規則到表

declare @codelen varchar(10),@codelens varchar(10)

set @codelens=1

while charindex(n',',@old_coderule)>0

begin

select @codelen=left(@old_coderule,charindex(n',',@old_coderule)-1),

@old_coderule=stuff(@old_coderule,1,charindex(n',',@old_coderule),n'')

insert @old_code values(@codelen,@codelens,n'substring('+@fieldname+n','+@codelens+n','+@codelen+n')')

set @codelens=@codelens+cast(@codelen as int)

endinsert @old_code values(@old_coderule,@codelens,n'substring('+@fieldname+n','+@codelens+n','+@old_coderule+n')')

--插分新編碼規則到表

while charindex(n',',@new_coderule)>0

begin

insert @new_code values(left(@new_coderule,charindex(n',',@new_coderule)-1))

set @new_coderule=stuff(@new_coderule,1,charindex(n',',@new_coderule),n'')

endinsert @new_code values(@new_coderule)

--生成編號規則修改處理語句

declare @sql nvarchar(4000)

set @sql=''

select @sql=@sql

+case

when n.codelen=0 then ''                   --新編碼長度為0,表示去掉這段編碼

else n'+case when len('+@fieldname

+n')<'+cast(o.codelens as varchar)

+n' then '''' else '+case

when n.codelen=o.codelen then n'+'+o.code  --新舊編碼長度相同時不需要處理

when n.codelen>o.codelen then case         --擴充編碼長度的處理,根據@position和舊編碼長度決定編碼的填充位置

when @position=-1 or @position>=o.codelen

then n'+'+o.code

+n'+'+quotename(replicate(@charfill,n.codelen-o.codelen),n'''')

else n'+stuff('+o.code

+n','+cast(@position+1 as varchar)

+n',0,'+quotename(replicate(@charfill,n.codelen-o.codelen),n'''')

+n')'

endelse case                                  --收縮編碼長度的處理,根據@position和新編碼長度決定編碼的擷取位置

when @position=-1 or @position>n.codelen

then '+left('+o.code+n','+cast(n.codelen as varchar)+n')'

else n'+stuff('+o.code

+n','+cast(@position+1 as varchar)

+n','+cast(o.codelen-n.codelen as varchar)

+n','''')'

endend

+n' end'

endfrom @old_code o,@new_code n

where o.id=n.id

return(stuff(@sql,1,1,n''))

end

jsp按規則生成編碼問題

這個功能需求是這樣的,編碼是由5個條件限定而成,前四個是從列表中隨意選擇,後乙個是根據型別按照序列遞增,整個編碼是由這5個條件組合而成,如下圖所示 此外還需滿足 1 生成的最終編碼是唯一的 2 可以批量生成。我們先看單項生成的例子。一 單項生成 背景 資料庫裡有匯入歷史資料,生成規則是按照選擇的字元...

生成字元SQL語句基本規則

生成字元sql語句基本規則 一 把字串接直生成sql字串 直接加單引號 sqlstr select from table 轉換成的sql為 select from table 二 把兩邊帶有單引號的字串生成sql字串 把乙個常量轉換成帶單引號的字串 把字串兩邊加三個單引號 sqlstr select...

通過Excel生成批量SQL語句,處理大量資料

我們經常會遇到這樣的要求 使用者給發過來一些資料,要我們直接給存放到資料庫裡面,有的是insert,有的是update等等,少量的資料我們可以採取最原始的辦法,也就是在sql裡面用insert into來實現,但是如果有幾十條幾百條甚至上千條資料的時候繼續寫單獨的sql語句的話那就慘了,其實有兩種簡...