--重排編碼的儲存過程
create proc p_rtaxiscode
@tablename sysname, --重排編碼的表名
@fieldname sysname, --編碼欄位名
@coderule varchar(100) --以逗號分隔的編碼規則,每層編碼的長度,比如1,2,3,表示有三層編碼,第一層長度為1,第二層長度為2,第三層長度為3
as--引數檢查
if isnull(objectproperty(object_id(@tablename),n'isusertable'),0)=0
begin
raiserror(n'"%s"不存在,或者不是使用者表',1,16,@tablename)
return
endif not exists(select * from syscolumns where id=object_id(@tablename) and name=@fieldname)
begin
raiserror(n'列名"%s"在使用者表"%s"中無效',1,16,@fieldname,@tablename)
return
endif isnull(@coderule,'')=''
begin
raiserror(n'必須編碼規則字串',1,16)
return
endif patindex(n'%[^0-9^,]%',@coderule)>0
begin
raiserror(n'編碼規則字串"%s"中只能包含數字和逗號(,)',1,16,@coderule)
return
end--生成編碼重排處理語句
declare @s nvarchar(4000),@len int,@lens int
select
@tablename=quotename(@tablename),
@fieldname=quotename(@fieldname),
@len=left(@coderule,charindex(n',',@coderule+n',')-1),
@lens=@len,
@coderule=stuff(@coderule,1,charindex(n',',@coderule+n','),n'')+n',',
@s=n'right('+cast(power(10,@len) as varchar)
+n'+(select count(distinct '+@fieldname
+n') from '+@tablename
+n' where '+@fieldname+n'<=a.'+@fieldname
+n' and len('+@fieldname+n')='+cast(@len as varchar)
+n'),'+cast(@len as varchar)+n')'
while len(@coderule)>1
begin
select
@len=left(@coderule,charindex(n',',@coderule)-1),
@s=@s
+n'+case when len('+@fieldname
+n')>'+cast(@lens as varchar)
+n' then right('+cast(power(10,@len) as varchar)
+n'+(select count(distinct '+@fieldname
+n') from '+@tablename
+n' where '+@fieldname+n'<=a.'+@fieldname
+n' and '+@fieldname+n' like left(a.'+@fieldname
+n','+cast(@lens as varchar)
+n')+'''+replicate(n'_',@len)
+n'''),'+cast(@len as varchar)
+n') else '''' end',
@lens=@lens+@len,
@coderule=stuff(@coderule,1,charindex(n',',@coderule),n'')
endexec(n'update a set '+@fieldname+n'='+@s+n' from '+@tablename+n' a')
Postgres儲存樹形資料
碰到乙個樹形資料需要儲存再資料控制,碰到以下兩個問題 為了更加簡單一些,我們將使用一下資料 section a section a.1 section b section b.1 section b.1 section b.1.1當設計自引用表 有時候自己join自己 最簡單明瞭的就是有乙個pare...
樹形資料深度排序處理示例 模擬單編號法 sql
測試資料 declare t table id char 3 pid char 3 name nvarchar 10 insert t select 001 null 山東省 union all select 002 001 煙台市 union all select 004 002 招遠市 unio...
樹形資料的搜尋方法 javascript
假設有這樣的問題。給乙個如下資料結構的資料。然後求id 01001002的text值。var tree 這是個很明顯的多叉樹的樹形結構,一般情況下,對於這種樹形結構一般採用深度優先遍歷和廣度優先遍歷。深度優先遍歷的原則是 1.從頂點開始 2.如果當前節點有子節點,則遍歷當前節點的所有子節點 遞迴實現...