2016-03-08 19 views
2

我有這個表SQL服務器:如何改變現有的AUTO_INCREMENT的列

CREATE TABLE [dbo].[MyTable] 
(
    [MyTableId] [int] IDENTITY(1,1) NOT NULL, 
    [Description] [varchar](50) NOT NULL, 
    CONSTRAINT [PK_MyTable] 
     PRIMARY KEY CLUSTERED ([MyTableId] ASC) 
) 

它已經擁有了IDENTITY (1,1)。我想要的是將自動增量更改爲2而不是1.我該怎麼做?

我發現一些答案,說我需要刪除列並創建一個新的,但我不知道是否有一個更簡單的解決方案。另外,我發現我可以使用SSMS - >工具 - >選項 - >設計器 - >表和數據庫設計器來實現,但我想要的是我可以作爲SQL腳本運行的腳本。

謝謝!

+0

您的表格是否已經有數據?如果是這樣,你想更新它嗎?如果不是,您可以在設計器中對其進行修改並生成更改腳本。 – Tanner

+1

您是否知道SSMS中的大多數設計器操作都可以保存爲[SQL腳本](https://msdn.microsoft.com/zh-cn/library/efhhffxd.aspx)?這是查看SSMS在幕後生成的SQL的好方法。右鍵單擊表設計器,然後從上下文菜單中選擇*生成更改腳本*。在彈出的新對話框中,您可以查看/保存/複製SQL語句。此時你仍然可以退出,所以如果你不想讓它們成爲現實,那麼這些更改就不會被提交。 –

+0

@EuphoriaGrogi這個問題已經在該帖子中的答案。 –

回答

0

對不起,您無法更改現有identity列中的增量。

正如您所懷疑的;過程如下:

  1. 創建新表。
  2. (可選)遷移現有數據。
  3. 拖放舊桌子。
  4. 重命名新表。

需要一個新表,因爲無法更新現有標識,並且SQL Server只允許one identity column per table

-- Orginal table, with identity column. 
CREATE TABLE Original 
    (
     X  INT IDENTITY(1, 1) 
    ) 
; 

-- New table, with updated identity column. 
CREATE TABLE New 
    (
     X  INT IDENTITY(2, 1) 
    ) 
; 

/* Transfer existing values. 
* Identity insert is require to preserve existing 
* keys. 
*/ 
SET IDENTITY_INSERT New ON; 

    INSERT INTO New 
     (
      X 
     ) 
    SELECT 
     X 
    FROM 
     Original 
    ; 

SET IDENTITY_INSERT New OFF; 

-- Drop original table. 
DROP TABLE Original; 

-- Rename new. 
EXECUTE sp_rename 'New', 'Original'; 

編輯

  1. 正如下面SSMS的評論指出,可以爲你自動完成這一過程。
  2. 添加了示例代碼和更多詳細信息。
  3. 刪除可添加新標識列的語句,SQL Server僅支持每個表一個。
+0

我使用SSMS完成了這個任務,而不會丟失 – Sherlock

+1

幕後SSMS創建一個新表,將所有數據從舊錶移動到新表,然後刪除舊錶,然後重命名新表。您可以通過查看更改腳本或運行SQL Profiler來查看。 –