2017-02-22 31 views
0

我有一個表Tab1,其中一列是IDNvarchar(80) [MSSQL]。我想有一個變量,如初始值= 00100000,然後將其增加001000010010000200100003等等.later使用它從循環中從此變量中獲取tab1.id。誰能幫我這個?如何在MSSQL中增加nvarchar類型

+2

不要。改用int標識列。用戶設計的自動增量列必然會失敗。我甚至不能確定像Aaron Bertrand或Martin Smith這樣的傳奇人物能夠使用簡單的SQL編寫可靠的自動增量列,而無需使用身份或序列。 – ATC

回答

4

我首先要說的是,如果你想要一個易於增量的變量,NVARCHAR不是完全的路要走;但我也會假設你有這樣做的理由。

話雖這麼說,增加的價值是一樣容易:

SELECT CAST(<column_name> AS INT) + 1 FROM Tab1; 

插入帶有前導零的值,你將需要做一些串聯:

SELECT '00' + CAST(CAST(<column_name AS INT) + 1 AS NVARCHAR(80)) FROM Tab1; 

剛僅供參考,SQL Server將自動嘗試將NVARCHAR值轉換爲INTEGER值,當您嘗試添加1時,所以您可以在技術上將其縮短爲:

SELECT '00' + CAST(<column_name> + 1 AS NVARCHAR(80)); 

如果您最終希望達到覆蓋這兩個前導零的值,那麼您以後還需要考慮這些值。有幾種方法可以做到這一點。其中最簡單的是:

SELECT RIGHT('00000' + CAST(<column_name> + 1 AS NVARCHAR(80)),8); 
+1

這根本不是安全的。多個用戶在同一時間執行此代碼將獲得相同的數字。 – ATC

+0

@ATC顯然。 OP已經對使用IDENTITY列有了一個評論,也沒有說有多少用戶會同時增加這些數據,如果有的話。我甚至開始說這不是要走的路;但如果不可取,​​仍然可以增加「NVARCHAR」,所以我唯一的目標就是回答OP的實際問題。 – 3BK

+1

我建議使用基於標識列的計算列。簡單,乾淨,線程安全。 – ATC

相關問題