3 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
IDENTITY
sys.syscolpars
SEQUENCE
next value for seq
ALTER TABLE...SWITCH
示例代碼。
設(shè)置測(cè)試表 identity
列。
CREATE TABLE dbo.tblFoo (bar INT PRIMARY KEY,filler CHAR(8000),filler2 CHAR(49))INSERT INTO dbo.tblFoo (bar)SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY (SELECT 0))FROM master..spt_values v1, master..spt_values v2
修改為有一個(gè) identity
列(或多或少是瞬間的)。
BEGIN TRY; BEGIN TRANSACTION; /*Using DBCC CHECKIDENT('dbo.tblFoo') is slow so use dynamic SQL to set the correct seed in the table definition instead*/ DECLARE @TableScript nvarchar(max) SELECT @TableScript = ' CREATE TABLE dbo.Destination( bar INT IDENTITY(' + CAST(ISNULL(MAX(bar),0)+1 AS VARCHAR) + ',1) PRIMARY KEY, filler CHAR(8000), filler2 CHAR(49) ) ALTER TABLE dbo.tblFoo SWITCH TO dbo.Destination; ' FROM dbo.tblFoo WITH (TABLOCKX,HOLDLOCK) EXEC(@TableScript) DROP TABLE dbo.tblFoo; EXECUTE sp_rename N'dbo.Destination', N'tblFoo', 'OBJECT'; COMMIT TRANSACTION;END TRYBEGIN CATCH IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; PRINT ERROR_MESSAGE();END CATCH;
測(cè)試結(jié)果。
INSERT INTO dbo.tblFoo (filler,filler2) OUTPUT inserted.*VALUES ('foo','bar')
施予
bar filler filler2----------- --------- ---------10001 foo bar
洗凈
DROP TABLE dbo.tblFoo
- 3 回答
- 0 關(guān)注
- 915 瀏覽
添加回答
舉報(bào)