2013-04-24 13 views
7

Stworzyłem tabelę w programie SQL Server tak:Jak ustawić kolumny tożsamości do tabeli utworzonej w serwerze 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 

Jeśli chcę zrobić ID kolumnę tożsamości, co jest potrzebne? Czy muszę upuścić i utworzyć tę tabelę i ustawić ID na [ID] [int] IDENTITY(1,1) NOT NULL.

Użycie polecenia upuszczania i tworzenia powoduje utratę wszystkich danych z tabeli UserName.

Czy istnieje inny sposób ustawienia IDENTITY COLUMN na utworzonej tabeli w kolumnie bez utraty danych?

używam SQL Server 2008 R2 :)

+3

Możesz upuścić tylko kolumnę - nie cały stół. Ale ty ** nie możesz ** dodać specyfikacji "TOŻSAMOŚCI" do istniejącej kolumny - to nie jest możliwe. –

+0

Używanie ALTER TABLE? – zey

+0

@marc_s: cóż, to ma sens. ale czy jest jakiś prostszy sposób to zrobić, jeśli kolumna ID mojej tabeli jest już używana jako FK gdzie indziej? –

Odpowiedz

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

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

Spowoduje to utworzenie kolumny, ale wszystkie dane będą nadal utracone – Phil

+2

@Phil: nie, nie "wszystkie dane". Tylko wartości dla istniejącej kolumny "ID". Co rzeczywiście może być problemem, jeśli do tabeli odwołują się inne tabele. –

+0

Miałem na myśli "Wszystkie dane" w kolumnie - ale dziękuję za wyjaśnienie – Phil

4

próbować ten jeden -

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

używając tabeli 'temp', to jest miłe! – zey

1

Najprostszym sposobem: -

  1. prawym przyciskiem myszy na stole w Eksploratorze obiektów i wybierz "Projekt"
  2. Wybierz kolumnę, dla której chcesz ustawić tożsamość i przejdź do właściwości kolumn
  3. Pod zmiany 'tożsamości specyfikacja' 'Czy Identity' na 'Tak'
  4. Kliknij przycisk Zapisz .... Gotowe :)

Hope this helps

0

Oto rozwiązanie, które jest minimalnie zalogowane.

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

ale funkcja TOŻSAMOŚĆ() może "tylko w SELECT z klauzulą ​​tabeli do"

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