it-swarm.com.de

Festlegen der Identitätsspalte für die erstellte Tabelle in SQL Server

Ich habe eine Tabelle in SQL Server wie folgt erstellt:

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

Wenn ich ID zu einer Identitätsspalte machen möchte, was brauche ich? Muss ich diese Tabelle löschen und erstellen und ID auf [ID] [int] IDENTITY(1,1) NOT NULL setzen. 

Bei Verwendung von Drop and Create gehen alle Daten aus der Tabelle UserName verloren.

Gibt es eine andere Möglichkeit, IDENTITY COLUMN in erstellte Tabelle s Spalte zu setzen, ohne Daten zu verlieren?

Ich benutze SQL Server 2008 R2 :)

8
zey
ALTER TABLE [UserName] DROP COLUMN [ID];

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

Der einfachste Weg:-

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle und wählen Sie "Design".
  2. Wählen Sie die Spalte aus, für die Sie die Identität festlegen möchten, und wechseln Sie zu Spalteneigenschaften
  3. Ändern Sie unter "Identitätsspezifikation" die Option "Ist Identität" in "Ja".
  4. Klicken Sie auf Speichern .... Fertig :)

Hoffe das hilft

4
Sudeep A R

Probier diese -

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
4
Devart

Hier ist eine Lösung, die minimal protokolliert wird.

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

Die IDENTITY () - Funktion kann jedoch "nur in einer SELECT-Anweisung mit einer INTO-Tabellenklausel".

http://msdn.Microsoft.com/de-de/library/ms189838.aspx

0
an phu