2011-04-05 86 views
0

所以我有一個SQL Server表中有一個主鍵列和4個其他列。當我修改表,並選擇主鍵列爲身份時,它不會讓我保存表。SQL Server不會讓我做列標識

如何通過T-SQL或其他方式使其成爲標識列而無需轉到UI?

謝謝。

下面是創建

USE [db] 
GO 

/****** Object: Table [dbo].[tblMessages] Script Date: 04/05/2011 11:58:25 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tblMessages](
    [messageId] [int] NOT NULL, 
    [messageText] [varchar](500) NOT NULL, 
    [messageLatitude] [float] NOT NULL, 
    [messageLongitude] [float] NOT NULL, 
    [messageTimestamp] [datetime] NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [messageId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 
+1

請發佈表格的創建腳本。 – Lucero 2011-04-05 15:57:03

+0

上面發佈的編輯 – Scott 2011-04-05 15:59:15

+0

如何在表中有數據時使用代碼執行此操作。 http://stackoverflow.com/questions/288222/how-do-i-add-the-identity-property-to-an-existing-column-in-sql-server。或者你可以使用SSMS,它會爲你降下並重新創建所有的東西。 – 2011-04-05 16:13:23

回答

2

不能在創建後將現有列轉換爲IDENTITY列。

ALTER TABLE dbo.YourTable 
    ALTER COLUMN YourColumn INT IDENTITY 

將導致一個錯誤:

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'IDENTITY'.

您需要創建INT IDENTITY類型的新列,然後可能刪除舊的一個。或者如果您的表格仍然爲空,請刪除它並使用您的ID列的正確設置重新創建它

+0

+1對於同意我:) – JNK 2011-04-05 16:07:50

+0

對於SQL Server 2008有可能[見我的答案](http:// stackoverflow。 COM /問題/ 6084572 /如何到組創造-A-表沒有,任何數據丟失的自動遞增,後/ 6086661#6086661)。 – 2011-05-22 17:00:48

+0

@Martin:好的,謝謝 - 很高興知道 - 儘管它感覺像是一團雜亂的黑客...... – 2011-05-22 20:03:36

1
ALTER TABLE MyTable 
ADD NewIdentity INT IDENTITY; 

ALTER TABLE MyTable 
DROP COLUMN OldPK; 

編輯

如果你的表是空的,只是砸和INT後您的PK列添加IDENTITY,並用它做。

+0

+1你在發帖之前就明白了 - 我只是誤解了你的答案..... – 2011-04-05 16:08:39

+0

@Marc - 你提供了一個關於* why的解釋,雖然我跳過了。 – JNK 2011-04-05 16:09:24

+0

嗯,我剛纔引用了微軟的錯誤信息 - 仍然沒有真正解釋**爲什麼**這是不可能的(如果是的話,會很好!) – 2011-04-05 16:10:25