自動編號的儲存過程 (轉)
CREATE PROCEDURE Get_BH @cL_MC char(20),@nL_Init Int AS
begin
Declare @nL_CD Numeric(2,0),@cL_LSH char(20),@cL_LX Char(1),@nL_CDT Int,@nL_CDM int
Declare LSHB_cursor Cursor For Cd,LSH,Lx From LSHB Where to:MC=@cL_MC">MC=@cL_MC
Open LSHB_cursor
Fetch Next From LSHB_Cursor into @nL_CD,@cL_LSH,@cL_LX
If @@FETCH_STATUS = 0
begin
Select @nL_CDM=Len(RTrim(Convert(Char(10),@nL_Init)))
If @cL_LX='1'
begin -- 前面四位為年 '2000'
Select @nL_CDT=@nL_CD-4
If left(@cL_LSH,4)=convert(char(4),getdate(),102) /* 年份相等,序號加 1 */
begin
Select @nL_CDM=Len(RTrim(Convert(Char(20),Convert(int,Right(@cL_LSH,16))+1)))
Update LSHB set LSH=Left(@cL_LSH,4)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(int,Right(@cL_LSH,16))+1))
where
End
else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(4),getdate(),102),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(4),getdate(),102),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
If @cL_LX='2'
begin -- 前面六位為年月 '200008'
Select @nL_CDT=@nL_CD-6
If left(@cL_LSH,4)=convert(char(4),getdate(),102) AND Convert(int,substring(@cL_LSH,5,2))=DATEPART(month,getdate())
/* 年月相等,序號加 1 */
begin
Select @nL_CDM=Len(RTrim(Convert(Char(20),Convert(int,Right(@cL_LSH,14))+1)))
Update LSHB set LSH=Left(@cL_LSH,6)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(int,Right(@cL_LSH,14))+1))
where
End
else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(7),getdate(),102),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+RTrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(7),getdate(),102),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
If @cL_LX='3'
begin -- 前面八位為年月日 '20000910'
Select @nL_CDT=@nL_CD-8
If left(@cL_LSH,4)=convert(char(4),getdate(),102) AND Convert(int,substring(@cL_LSH,5,2))=DATEPART(month,getdate())
AND Convert(Int,SubString(@cL_LSH,7,2))=DatePart(Day,Getdate())
Begin
Select @nL_CDM=Len(Rtrim(Convert(Char(20),Convert(Int,Right(@cL_LSH,12))+1)))
Update LSHB Set LSH=Left(@cL_LSH,8)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(Int,Right(@cL_LSH,12))+1))
Where
End
Else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(10),getdate(),102),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+RTrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(10),getdate(),102),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
If @cL_LX='4'
begin -- 前面四位為年 '00' ,年用兩位表示
Select @nL_CDT=@nL_CD-2
If left(@cL_LSH,2)=convert(char(2),getdate(),2) /* 年份相等,序號加 1 */
begin
Select @nL_CDM=Len(RTrim(Convert(Char(20),Convert(int,Right(@cL_LSH,18))+1)))
Update LSHB set LSH=Left(@cL_LSH,2)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(int,Right(@cL_LSH,18))+1))
where
End
else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(2),getdate(),2),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(2),getdate(),2),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
If @cL_LX='5'
begin -- 前面六位為年月 '0008', 年用兩位
Select @nL_CDT=@nL_CD-2
If left(@cL_LSH,2)=convert(char(2),getdate(),2) AND Convert(int,substring(@cL_LSH,3,2))=DATEPART(month,getdate())
/* 年月相等,序號加 1 */
begin
Select @nL_CDM=Len(RTrim(Convert(Char(20),Convert(int,Right(@cL_LSH,16))+1)))
Update LSHB set LSH=Left(@cL_LSH,4)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(int,Right(@cL_LSH,16))+1))
where
End
else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(5),getdate(),2),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+RTrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(5),getdate(),2),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
If @cL_LX='6'
begin -- 前面六位為年月日 '000910'
Select @nL_CDT=@nL_CD-6
If left(@cL_LSH,2)=convert(char(2),getdate(),2) AND Convert(int,substring(@cL_LSH,3,2))=DATEPART(month,getdate())
AND Convert(Int,SubString(@cL_LSH,5,2))=DatePart(Day,Getdate())
Begin
Select @nL_CDM=Len(Rtrim(Convert(Char(20),Convert(Int,Right(@cL_LSH,14))+1)))
Update LSHB Set LSH=Left(@cL_LSH,6)+Replicate('0',@nL_CDT-@nL_CDM)+Rtrim(Convert(Char(20),Convert(Int,Right(@cL_LSH,14))+1))
Where
End
Else
If @nL_Init>1
Update LSHB set LSH=replace(Convert(Char(8),getdate(),2),'.','')+Replicate('0',@nL_CDT-@nL_CDM)+RTrim(Convert(Char(10),@nL_Init))
where
Else
Update LSHB set LSH=replace(Convert(Char(8),getdate(),2),'.','')+Replicate('0',@nL_CDT-1)+'1'
where
End
end
CLOSE LSHB_cursor
DEALLOCATE LSHB_cursor
select LSH from LSHB where
End
GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991826/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自動生成對錶進行插入和更新的儲存過程的儲存過程 (轉)儲存過程
- 把自編儲存過程設定為系統儲存過程儲存過程
- 啟動SQL SERVER時自動執行儲存過程(轉)SQLServer儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 編寫JAVA儲存過程Java儲存過程
- JAVA儲存過程(轉)Java儲存過程
- 動態儲存過程儲存過程
- 儲存過程編譯時卡死儲存過程編譯
- 移動索引的儲存過程索引儲存過程
- 儲存過程單引號問題儲存過程
- oracle自動生成編譯所有函式、儲存過程、觸發器的語句Oracle編譯函式儲存過程觸發器
- SQL分隔字串的儲存過程 (轉)SQL字串儲存過程
- oracle 儲存過程重新編譯方法Oracle儲存過程編譯
- 儲存過程編譯時會卡死儲存過程編譯
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- 動態呼叫儲存過程 sample:儲存過程
- 儲存過程儲存過程
- 儲存過程編寫經驗和最佳化措施(轉)儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 建立儲存過程編譯無效物件儲存過程編譯物件
- 編寫儲存過程基本注意事項儲存過程
- oracle的儲存過程Oracle儲存過程
- 修改的儲存過程儲存過程
- mysql的儲存過程MySql儲存過程
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- 一個儲存過程編譯HANG住的分析儲存過程編譯
- 編寫和優化SQL Server的儲存過程優化SQLServer儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- MySQL5儲存過程使用(轉)MySql儲存過程
- mysql儲存過程基本函式(轉)MySql儲存過程函式
- 使用ADO呼叫儲存過程 (轉)儲存過程
- (轉)如何oracle除錯儲存過程Oracle除錯儲存過程
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程