亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQLServer,如何在創建表后設置自動增量而不丟失數據?

SQLServer,如何在創建表后設置自動增量而不丟失數據?

長風秋雁 2019-07-03 17:18:10
SQLServer,如何在創建表后設置自動增量而不丟失數據?我有張桌子table1在Sqlserver 2008中,其中有記錄。我要主鍵table1_Sno列為自動遞增列。在不進行任何數據傳輸或表克隆的情況下,能做到這一點嗎?我知道我可以使用ALTERTABLE來添加一個自動增量列,但是我可以簡單地將AUTO_CREATION選項添加到作為主鍵的現有列中嗎?
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

更改IDENTITY屬性實際上是元數據只進行更改。但是,要直接更新元數據,需要在單用戶模式下啟動實例,并在sys.syscolpars而且是沒有文件記錄的/沒有支持的,不是我會推薦的東西,也不是我會給出的任何其他細節。

對于在SQLServer 2012+上遇到這個答案的人來說,要實現自動遞增列的結果,最簡單的方法是創建一個SEQUENCE對象并設置next value for seq作為列的默認值。

或者,對于以前的版本(從2005年起),這個解決方案發布在此連接項顯示了一種完全支持的方法來完成此操作,而不需要使用ALTER TABLE...SWITCH..還在MSDN上發表博客這里..盡管實現這一目標的代碼并不簡單,而且也存在一些限制-例如要更改的表不能成為外鍵約束的目標。

示例代碼。

設置測試表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

修改為有一個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;

測試結果。

INSERT INTO dbo.tblFoo (filler,filler2) OUTPUT inserted.*VALUES ('foo','bar')

施予

bar         filler    filler2----------- --------- ---------10001       foo       bar

洗凈

DROP TABLE dbo.tblFoo


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 906 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號