2016-05-10 27 views
1

我必須在sql server上開發插入查詢,該插入查詢從另一個nchar值插入一個nchar值,但我必須將其增加1.我必須保留左側0(並不總是0)。我如何進行轉換?這是我的代碼:SQL Server插入頂部nchar +1可以以0開始

DECLARE @CIG int; 
SET @CIG = (SELECT MAX([VALUE1]) FROM [DB].[dbo].[TABLE]) +1; 

例如,如果我有:

0761600002511 

的結果將是:

0761600002512 

,如果我有:

1761600002511 

結果將是:

1761600002512 

我試圖像這樣的東西:(具有相同的轉換錯誤,並與可能的首發0同樣的問題)

SET @CIG = 
    CAST 
    (
     (CAST 
     (
      (
       SELECT MAX([VALUE1])FROM [DB].[dbo].[TABLE] 
      ) 
     as int)+1) 
    as nchar(100)) 

感謝

+0

VALUE1是NCHAR數據類型?什麼是它的長度 –

+3

使用bigint創建一個'identity'列。當數據庫具有完全用於此目的的內置功能時,不要試圖用'max()'做這件事。 –

+0

是的,我試圖將它傳遞給int來添加1,但它不工作,它仍然失去0 – Noark

回答

0

假設你已經設置NCHAR(10)的長度爲您列,以保持零如果有

DECLARE @tmp NCHAR(100) ='0761600002511'; 
SELECT LEFT(@tmp ,3)+CAST((CAST(RIGHT(@tmp ,97)AS INT)+1) AS NCHAR(10)) 
+0

謝謝,這似乎很有趣,但我有'溢出int列'錯誤(我有這樣的西班牙語如此這是錯誤的翻譯)我有nchar(100)(是的,它是荒謬的,但不是我的分貝)所以我改變你的10爲100,但我不知道什麼是'3'值爲我也嘗試了'13',但同樣的錯誤)。 – Noark

+0

只是由97取代10,我已更新Ans –

+1

完美的作品。非常感謝! – Noark

0

應該轉換/施放第一和然後取最大值。嘗試這個。

DECLARE @CIG int; 
SELECT @CIG = MAX(CONVERT(INT, [VALUE1]) + 1 FROM [DB].[dbo].[TABLE]; 
+0

謝謝,但whith這sintax我有一個'FROM'錯誤,仍然有'0'問題 – Noark

0

您可以使用下面udfLeftSQLPadding功能。 首先,計算整數值。 然後通過使用udfLeftSQLPadding SQL pad leading zeros function,如果需要,可以將數字的開頭加零。

DECLARE @CIG bigint = 761600002511 
set @CIG = @CIG + 1 
select dbo.udfLeftSQLPadding(cast(@CIG as varchar(13)),13,'0') 

我認爲你最後需要13個字符長的字符串,所以我用了13次以上的兩次。一旦在CAST()函數,一次用於udfLeftSQLPadding功能

我希望它能幫助,

相關問題