web-dev-qa-db-fra.com

Comment modifier une table pour la spécification d'identité est l'identité SQL Server


ne fonctionne pas

ALTER TABLE ProductInProduct ALTER COLUMN Id KEY IDENTITY (1, 1);

Vérifier l'image

J'ai une table ProductInProduct veut que son identifiant soit unique. enter image description here

11
smart boy

Vous ne pouvez pas "convertir" une colonne existante en une colonne IDENTITY - vous devrez créer une nouvelle colonne en tant que INT IDENTITY:

ALTER TABLE ProductInProduct 
ADD NewId INT IDENTITY (1, 1);

Mise à jour:

OK, donc il y a c'est un moyen de convertir une colonne existante en IDENTITY. Si vous en avez absolument besoin - consultez cette réponse de Martin Smith avec tous les détails sanglants.

16
marc_s

Vous ne pouvez pas modifier les colonnes existantes pour l'identité.

Vous avez 2 options,

Créer une nouvelle table avec identité et supprimer la table existante

Créer une nouvelle colonne avec identité et supprimer la colonne existante

Approche 1. (Nouveau tableau) Ici, vous pouvez conserver les valeurs de données existantes dans la colonne d'identité nouvellement créée.

CREATE TABLE dbo.Tmp_Names
    (
      Id int NOT NULL
             IDENTITY(1, 1),
      Name varchar(50) NULL
    )
ON  [PRIMARY]
go

SET IDENTITY_INSERT dbo.Tmp_Names ON
go

IF EXISTS ( SELECT  *
            FROM    dbo.Names ) 
    INSERT  INTO dbo.Tmp_Names ( Id, Name )
            SELECT  Id,
                    Name
            FROM    dbo.Names TABLOCKX
go

SET IDENTITY_INSERT dbo.Tmp_Names OFF
go

DROP TABLE dbo.Names
go

Exec sp_rename 'Tmp_Names', 'Names'

Approche 2 (nouvelle colonne) Vous ne pouvez pas conserver les valeurs de données existantes dans la colonne d'identité nouvellement créée, la colonne d'identité contiendra la séquence de nombres.

Alter Table Names
Add Id_new Int Identity(1, 1)
Go

Alter Table Names Drop Column ID
Go

Exec sp_rename 'Names.Id_new', 'ID', 'Column'

Consultez le message suivant du forum Microsoft SQL Server pour plus de détails:

http://social.msdn.Microsoft.com/forums/en-US/transactsql/thread/04d69ee6-d4f5-4f8f-a115-d89f7bcbc032

1
Josh

Vous ne définissez pas la valeur par défaut dans une table. Vous devez d'abord désactiver l'option "Valeur par défaut ou Liaison".

0
maino