簡體   English   中英

非身份列自動遞增

[英]non-identity column auto increment

我正在進行一個項目來合並數據(來自2個不同的DB)。 我創建了一個包含幾列的表:

  • MAPPING_ID int
  • ContentID int
  • ContentValue varchar(200)

例如,當我對原始數據源執行第一組插入操作時,一切都很好。

Mapping_ID: 53
ContentID: 53
ContentValue: Original Data 1

Mapping_ID: 54
ContentID: 54
ContentValue: Original Data 2

但是,當我對另一個源(我要合並的數據)進行第二組插入時,我希望Mapping_ID列繼續到下一個數字(即55,56,57 ...)

我查看了row_number函數,但是它從1開始。 有沒有辦法在55處啟動它?

我想我可以將Mapping_ID列設置為Identity字段,但是在第一次插入時將其關閉,然后使用最大值(54)對其進行播種,然后在第二次插入時將其打開。

還有另一種方法可以做到這一點嗎?

在SQL Server 2012+中,您可以使用SEQUENCE對象使用自動增量值填充非標識列。 另外,您可以對不同的表使用相同的SEQUENCE進行計數傳遞,並從SELECT和UPDATE查詢中的序列中獲取值。

首先,創建SEQUENCE:

CREATE SEQUENCE SchemaName.SequenceName
START WITH 1
INCREMENT BY 1 ;

然后,使用必需列上的序列值創建DEFAULT約束:

ALTER TABLE tableName ADD CONSTRAINT constraint_unique_name DEFAULT NEXT VALUE FOR SchemaName.SequenceName FOR Mapping_ID;

要使row_number()從55開始,您可以在row_number()計算中添加54(或任何數字):

(row_number() over (partition by Y order by X)) + 54

從SQL Server 2012開始,實際上有一種全新的方法可以執行這種操作:序列對象。 很抱歉,由於我目前在MySQL世界中工作,所以無法為您編寫程序,但是它非常容易實現。 基本思想是您要維護一個具有其自身的種子和增量量的單獨數據庫對象,但要記住它們與傳統標識值的區別(例如,可以覆蓋它們),但需要注意一些警告,因此請確保執行一些操作研究。

這里有幾篇文章可以幫助您入門。 如果您遇到問題,請打回我,我將嘗試與您一起檢查代碼。

https://msdn.microsoft.com/zh-CN/library/ff878091.aspx

https://msdn.microsoft.com/zh-CN/library/ff878370.aspx

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM