2013-04-24 4 views
7

tôi đã tạo một bảng trong SQL Server như thế này:Làm thế nào để thiết lập cột sắc để bảng được tạo trong SQL server

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 

Nếu tôi muốn làm ID một cột sắc, Tôi cần những gì? Tôi có cần phải thả và tạo bảng này hay không và đặt ID thành [ID] [int] IDENTITY(1,1) NOT NULL.

Bằng cách sử dụng thả và tạo, tất cả dữ liệu từ bảng UserName bị mất.

Có cách nào khác để đặt IDENTITY COLUMN thành tạo bảng của cột mà không làm mất dữ liệu không?

tôi sử dụng SQL Server 2008 R2 :)

+3

Bạn chỉ có thể thả cột - không phải toàn bộ bảng. Nhưng bạn ** không thể ** thêm đặc tả 'IDENTITY' vào cột hiện tại - điều đó là không thể. –

+0

Sử dụng ALTER TABLE? – zey

+0

@marc_s: tốt, điều đó có ý nghĩa. nhưng có cách nào dễ dàng hơn để làm điều đó nếu cột ID của bảng của tôi đã được sử dụng như một FK ở một nơi khác? –

Trả lời

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

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

Điều này sẽ tạo cột nhưng tất cả dữ liệu sẽ vẫn bị mất – Phil

+2

@Phil: không, không phải "tất cả dữ liệu". Chỉ các giá trị cho cột 'ID' hiện tại. Mà thực sự có thể là một vấn đề nếu bảng được tham chiếu bởi các bảng khác. –

+0

Tôi có nghĩa là "Tất cả dữ liệu" trong cột - nhưng cảm ơn bạn đã làm rõ – Phil

4

Hãy thử này -

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

sử dụng bảng 'temp', thật tuyệt! – zey

1

Cách đơn giản nhất: -

  1. Nhấp chuột phải vào bảng trong thám hiểm đối tượng và chọn 'Thiết kế'
  2. Chọn cột mà bạn muốn đặt nhận dạng và vào Properties Cột
  3. Dưới sự thay đổi -Identity Đặc điểm kỹ thuật ' 'là danh tính' thành 'Yes'
  4. Nhấp vào Lưu .... Done :)

Hope this helps

0

Đây là một giải pháp được ghi lại tối thiểu.

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

Nhưng SẮC() chức năng có thể "chỉ trong một câu lệnh SELECT với một khoản bảng VÀO"

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