sql 複雜自動編號錯誤批量修改方案

2022-09-05 06:42:10 字數 1479 閱讀 9406

] 前提:自動編號為18位,前4位是年份,中間10位是***x,最後四位是0001-9999的自動編號。

問題:某天發現2023年自動編號後四位從0001-0081後變為7328-8530,出現編號錯亂問題(原因未知待查)。但資料需要馬上批量重置,否則後續編號將繼續錯誤。

方案:擷取2023年份的前14位拼接後4位正確自動編號。實現如下:

--

查詢2023年我司專案編號,檢視後四位是否正確

select myprojectno,substring(myprojectno,15,4) from dbo.projectt where myprojectno like

'2016%

'order

bysubstring(myprojectno,15,4)--

查詢正確編號

select myprojectno as

'錯編號

',substring(myprojectno,15,4) as

'錯編號後四位

',left(myprojectno,14) as

'對編號前14位',

right('

0000'+

cast(row_number() over (order

bysubstring(myprojectno,15,4)) as

varchar(5)),4) as

'對編號後四位',

(left(myprojectno,14)+right('

0000'+

cast(row_number() over (order

bysubstring(myprojectno,15,4)) as

varchar(5)),4)) as

'對編號

'from

dbo.projectt

where myprojectno like

'2016%

'order

bysubstring(myprojectno,15,4)--

更新錯誤編號為正確(批量指令碼)

select

'update dbo.projectt set myprojectno=

'''+

(left(myprojectno,14)+right('

0000'+

cast(row_number() over (order

bysubstring(myprojectno,15,4)) as

varchar(5)),4))+

'''where myprojectno=

'''+myprojectno+

''''

from

dbo.projectt

where myprojectno like

'2016%

'order

bysubstring(myprojectno,15,4)

執行(批量指令碼)實現資料重置。

SQL 自動編號處理

關閉自動編號 setidentity insert t off 這個時候就允許插入id值了 insert into t id,name values 0,test 開啟自動編號 setidentity insert t on 這個時候就允許插入id值了 insert into t id,name v...

sql 複製含自動編號的表

通常情況下,我們可以直接通過如下語句來複製表 insert into mytb select from mydb.dbo.mytb 如果資料表中帶有自動編號的列,則出現 訊息 8101,級別 16,狀態 1,第 1 行 僅當使用了列列表並且 identity insert 為 on 時,才能為表 m...

SQL 主鍵 自動編號 主鍵自增

1.新建一資料表,裡面有欄位id,將id設為為主鍵 如下 create table tb id int,constraint pkid primary key id create table tb id int primary key 2.新建一資料表,裡面有欄位id,將id設為主鍵且自動編號 如下...