2012-12-05 107 views
0

在我的SQL Server數據庫內部我把它當作我的ID,例如SSK0000001SQL Server數據庫中的ID自動增加和更新

我希望它在我的系統中自動遞增,並且最後一個數字爲ID,例如「1」(在另一個新記錄後它將變爲SSK0000002)在我的SQL Server數據庫中更新。

我知道它可以在數據庫內設置自動增量,但現在我的IDnchar

任何人都可以幫助將不勝感激。

+0

您可以在您的表上定義要自動更新的觸發器。 –

+0

如果SSK總是一樣的,將它硬編碼到你的程序中或通過concatination查詢,並使用自動增量字段爲你完成這項工作。比任何你能寫的程序/觸發器快得多。如果沒有,添加列作爲varchar,並使PK('ssk列','自動增量列') –

回答

1

您可以將右側投射到int和增量:

declare @next int 
select @next = convert(int, right(max(id), 7)) + 1 
from your table 

然後插入爲:

insert into ... (Id, ...) 
values ( 'SDK' + right('0000000' + rtrim(ltrim(str(@next))), 7), ...) 

但是,這是最骯髒的解決方案,你可以採取:

  • 這導致大量的數據庫鎖定的(因爲聚合功能)
  • 最慢的自動增量
  • 很多代碼要保留。

我建議你移動到一個自動增量數據類型

+0

感謝您的回覆,這是我想要的工作!但現在我希望它可以**自動增量**和**更新**數據庫的最後一個數字,因爲我有一張表是存儲最後一個ID的號碼,同時獲得新的記錄。感謝先進的〜 – Bella

+0

你能否建議在SDK和0000000加入之後如何使ID自動遞增?非常感謝! – Bella

+0

as:'@next = coalesce(convert(int,right(max(id),7))+ 1,0)' – danihp

0

浮現在我的腦海裏第一個解決方案是

  • 爆炸你的ID讓你從數

  • 增量數

  • 然後堅持回SSK與許多獨立的SSK

0

我建議閱讀此相關的問題

Create custom "auto-increment" Compound Primary Key?

另一個想法是使用此解決方案

撰寫的關鍵

Set a custom identity value on a auto increment field

從微軟博客那些建議

http://forums.asp.net/t/1410179.aspx/1

但我最喜歡回答的不是最好的做法是這樣的:

創建一個用於存儲當前序列表中的值 創建一個函數來獲取並增加當前值 創建存儲過程以修改當前序列值 創建觸發器

這是MYSQL中的一個想法 http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/

我希望對大家有用

+0

問題是關於SQL Server的問題 – vstrien

+0

對不起 – user1594895

2

你可以使用基於自動遞增列計算列。應該從SQL Server 2005向上工作。

CREATE TABLE [dbo].[TEST1](
    [AUTO_ID] [int] IDENTITY(1,1) NOT NULL, 
    [ID] AS CAST(('SSK'+replace(str([AUTO_ID],(7),(0)),' ','0')) AS NCHAR(10)) PERSISTED, 
    [NAME] [nvarchar](10) NULL 

) ON [PRIMARY] 

GO 

INSERT INTO TEST1 (NAME) VALUES ('NAME1') 
INSERT INTO TEST1 (NAME) VALUES ('NAME2') 
INSERT INTO TEST1 (NAME) VALUES ('NAME3') 

SELECT * FROM TEST1 
相關問題