關於identity列的探討
今天在網上的mssql群裡遇到了一個人,問到MSSQL表裡的IDENTITY欄位,如何讓它在複製原來資料到該表時,原來資料的IDENTITY欄位不變,而新插入資料時,新插入的資料的IDENTITY依然增長,我查了很多資料,做了個實驗,最終解決,實驗過程指令碼如下:
use test1
go
drop table t1
drop table t2
go
create table t1(col1 int identity(100,1),col2 char(100))
create table t2(col1 int identity(1,1) not for replication,col2 char(100))
go
insert into t1 values('aaaaa')
insert into t1 values('bbbbbb')
insert into t1 values('cccccc')
go
set identity_insert t2 on
insert into t2(col1) select col1 from t1
go
DBCC CHECKIDENT(t2,RESEED,1)
go
insert into t2('eeeeee')
insert into t2('rrrrrr')
go
select * from t2
go
由於晚上回家後,發現昨晚的網友針對該問題又提出了疑問,我於是就決定對MSSQL的企業管理器中進行該操作進行了跟蹤,主要是t-sql和procedure,結果發現和昨晚幾乎差不多:
CREATE TABLE dbo.Tmp_Table_1
(
c1 int NOT NULL IDENTITY (50, 1000),
c2 char(10) NULL
) ON [PRIMARY]
SET IDENTITY_INSERT dbo.Tmp_Table_1 ON
IF EXISTS(SELECT * FROM dbo.Table_1)
EXEC('INSERT INTO dbo.Tmp_Table_1 (c1, c2)
SELECT c1, c2 FROM dbo.Table_1 WITH (HOLDLOCK TABLOCKX)')
SET IDENTITY_INSERT dbo.Tmp_Table_1 OFF
DROP TABLE dbo.Table_1
EXECUTE sp_rename N'dbo.Tmp_Table_1', N'Table_1', 'OBJECT'
同時網友又提出瞭如果原表有約束和二進位制資料的問題,那也只能是一步步實現了,比較麻煩,但MSSQL的EM的思路肯定是這麼實現的。
use test1
go
drop table t1
drop table t2
go
create table t1(col1 int identity(100,1),col2 char(100))
create table t2(col1 int identity(1,1) not for replication,col2 char(100))
go
insert into t1 values('aaaaa')
insert into t1 values('bbbbbb')
insert into t1 values('cccccc')
go
set identity_insert t2 on
insert into t2(col1) select col1 from t1
go
DBCC CHECKIDENT(t2,RESEED,1)
go
insert into t2('eeeeee')
insert into t2('rrrrrr')
go
select * from t2
go
由於晚上回家後,發現昨晚的網友針對該問題又提出了疑問,我於是就決定對MSSQL的企業管理器中進行該操作進行了跟蹤,主要是t-sql和procedure,結果發現和昨晚幾乎差不多:
CREATE TABLE dbo.Tmp_Table_1
(
c1 int NOT NULL IDENTITY (50, 1000),
c2 char(10) NULL
) ON [PRIMARY]
SET IDENTITY_INSERT dbo.Tmp_Table_1 ON
IF EXISTS(SELECT * FROM dbo.Table_1)
EXEC('INSERT INTO dbo.Tmp_Table_1 (c1, c2)
SELECT c1, c2 FROM dbo.Table_1 WITH (HOLDLOCK TABLOCKX)')
SET IDENTITY_INSERT dbo.Tmp_Table_1 OFF
DROP TABLE dbo.Table_1
EXECUTE sp_rename N'dbo.Tmp_Table_1', N'Table_1', 'OBJECT'
同時網友又提出瞭如果原表有約束和二進位制資料的問題,那也只能是一步步實現了,比較麻煩,但MSSQL的EM的思路肯定是這麼實現的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-605586/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於mongo原子操作的探討Go
- SEO關於探討URL的知識!
- 程寅:關於支付流程的探討
- 關於rman中set newname的探討
- 關於 performSelector 的一些小探討performSelector
- 關於python中slicing的探討Python
- 關於 DDoS 攻擊事件的探討(轉)事件
- 關於 Xmind 用例線上管理的探討
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- 乾貨| 關於程式碼對齊的探討
- 關於volatile與指令重排序的探討排序
- 關於MSSQL中計算列上建索引的探討SQL索引
- 關於apache james郵件伺服器的探討Apache伺服器
- 關於.Net中屬性的使用探討(一) (轉)
- 關於.Net中屬性的使用探討(二) (轉)
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- 關於如何防止重複簽到的技術探討
- 【轉】關於oracle中Move機制的一點探討Oracle
- 關於多型實現Singleton模式的探討 (轉)多型模式
- 關於 RAC VIP (Oracle10G RAC) 的探討(zt)Oracle
- 我的理解——關於“ERP過時論”的探討(轉)
- 關於結構體中指標的一些探討結構體指標
- 關於enq: TX - index contention 等待的探討與測試ENQIndex
- 關於 PHP-fpm master 程式和 worker 職責探討PHPAST
- 關於C語言結構體對齊問題的探討C語言結構體
- 關於IE8下media query相容的解決方案探討
- 簡單探討TypeScript 列舉型別TypeScript型別
- iOS 中關於列表滾動流暢方案的一些探討iOS
- 技能篇:關於快取資料的一致性探討快取
- C語言關於回撥函式和this指標探討C語言函式指標
- 關於網友的獲取MSSQL外來鍵資訊的問題的探討SQL
- TechInsights關於蘋果智慧手錶金屬殼電池的探討蘋果
- 關於複雜任務與異常處理的設計模式探討!設計模式
- 關於不使用firefly補丁對系統進行美化的探討(轉)
- 資料結構與演算法系列(二):關於陣列,我想探討兩個問題資料結構演算法陣列
- Promise探討Promise
- 【MySQL經典案例分析】關於資料行溢位由淺至深的探討MySql
- 探討關於NetSuite CRM系統優勢及在國內的發展UI