2013-04-24 61 views
7

我創造了這樣的SQL Server中的表:如何標識列設置爲創建表中的SQL服務器

CREATE TABLE [UserName] 
(
    [ID] [int] NOT NULL , 
    [Name] [nvarchar] (50) NOT NULL , 
    [Address] [nvarchar] (200) NULL 

    CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED ([ID] ASC) 
) ON [PRIMARY] 
GO 

如果我想打ID標識列,我需要什麼?我是否需要刪除並創建此表並將ID設置爲[ID] [int] IDENTITY(1,1) NOT NULL

通過使用drop和create,UserName表中的所有數據都將丟失。

是否有另一種方法將IDENTITY COLUMN設置爲創建表的列沒有丟失數據?

我使用SQL Server 2008 R2 :)

+3

可以刪除只列 - 而不是整個表。但是你**不能**將'IDENTITY'規範添加到現有的列 - 這是不可能的。 – 2013-04-24 09:26:09

+0

使用ALTER TABLE? – zey 2013-04-24 09:29:28

+0

@marc_s:好吧,這很有道理。但有沒有更簡單的方法來做到這一點,如果我的表的ID列已被用作其他地方的FK? – 2014-09-15 10:35:19

回答

12
ALTER TABLE [UserName] DROP COLUMN [ID]; 

ALTER TABLE [UserName] 
    ADD [ID] integer identity not null; 
+0

這將創建列,但所有數據仍將丟失 – Phil 2015-11-10 13:40:01

+2

@Phil:否,不是「所有數據」。只有現有的「ID」列的值。如果表被其他表引用,那麼這可能是一個問題。 – 2015-11-10 13:46:38

+0

我的意思是「所有數據」在列 - 但謝謝澄清 – Phil 2015-11-11 10:51:27

4

嘗試這一個 -

DECLARE @temp TABLE 
(
     ID INT NOT NULL 
    , Name NVARCHAR(50) NOT NULL 
    , [Address] NVARCHAR(200) NULL 
) 

INSERT INTO @temp (ID, Name, [Address]) 
SELECT ID, Name, [Address] 
FROM dbo.UserName 

DROP TABLE dbo.UserName 

CREATE TABLE dbo.UserName 
(
     [ID] [int] IDENTITY(1,1) NOT NULL 
    , [Name] [nvarchar] (50) NOT NULL 
    , [Address] [nvarchar] (200) NULL 
CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED 
([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

SET IDENTITY_INSERT dbo.UserName ON 

INSERT INTO dbo.UserName (ID, Name, [Address]) 
SELECT ID, Name, [Address] 
FROM @temp 

SET IDENTITY_INSERT dbo.UserName OFF 
+2

使用'temp'表,這很好! – zey 2013-04-24 09:41:38

1

最簡單的方法: -

  1. 右鍵單擊表在對象資源管理和選擇'設計'
  2. 選擇您要爲其設置標識的列然後轉到列屬性
  3. 在「身份規範」變「是一種身份」爲「是」
  4. 單擊保存....完成:)

希望這有助於

0

這裏是一個最小化記錄的解決方案。

SELECT 
    IDENTITY(INT, 1,1) AS ID, 
    Name, [Address] 
INTO dbo.UserName_temp 
FROM dbo.UserName; 


ALTER TABLE dbo.UserName_temp 
    ADD CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED; 

DROP TABLE dbo.UserName; 

EXEC sp_rename 'dbo.UserName_temp', 'UserName'; 

SRC: http://sqlmag.com/sql-server/appending-identity-column-temporary-table

但IDENTITY()函數 「只有在與INTO表子句的SELECT語句」

http://msdn.microsoft.com/en-us/library/ms189838.aspx

相關問題