web-dev-qa-db-fra.com

Comment définir la colonne d'identité sur la table créée dans le serveur SQL

J'ai créé une table dans SQL Server comme ceci:

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

Si je veux faire ID une colonne d'identité, de quoi ai-je besoin? Dois-je supprimer et créer cette table et définir ID sur [ID] [int] IDENTITY(1,1) NOT NULL

En utilisant drop et create, toutes les données de la table UserName sont perdues.

Existe-t-il un autre moyen de définir IDENTITY COLUMN sur la colonne created table sans perdre de données?

J'utilise SQL Server 2008 R2 :)

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

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

Le moyen le plus simple: -

  1. Faites un clic droit sur la table dans l'explorateur d'objets et sélectionnez "Conception".
  2. Sélectionnez la colonne pour laquelle vous souhaitez définir une identité et accédez à Propriétés de la colonne.
  3. Sous "Spécification d'identité", changez "Est l'identité" en "Oui"
  4. Cliquez sur Enregistrer .... Terminé :)

J'espère que cela t'aides

4
Sudeep A R

Essaye celui-là -

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

Voici une solution à journalisation minimale.

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

Mais la fonction IDENTITY () ne peut "que dans une instruction SELECT avec une clause de table INTO".

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

0
an phu