web-dev-qa-db-fra.com

Modifier la table pour désactiver l'IDENTITÉ

J'ai une table, qui a une colonne (orderid), dont son IDENTITY est définie sur true. Maintenant, je voudrais le déclencher. Comment puis-je faire cela avec ALTER COLUMN? Quelque chose comme ça?

ALTER TABLE MyTable
ALTER Column MyColumn SET IDENTITY OFF
9
Kaja

Une fois la colonne d'identité définie, vous ne pouvez pas la supprimer ou vous ne pouvez pas la désactiver.

Vous devez probablement supprimer la colonne en copiant d'abord les données dans une autre colonne ( qui n'a pas l'identité ). Ce serait donc comme ajouter une nouvelle colonne à votre table et y copier les valeurs de votre colonne d'identité existante. Déposez ensuite l'ancienne colonne ( ayant l'identité ) et renommez enfin la nouvelle colonne en l'ancien nom de colonne.

8
Rahul Tripathi

Vous devez utiliser SET IDENTITY_INSERT TO ON. Si vous le définissez sur ON, vous devez explicitement transmettre des valeurs à la colonne ID.

Pourquoi devriez-vous désactiver l'identité? Vous essayez peut-être de transmettre des valeurs explicites.

Veuillez consulter l'exemple de démonstration ici.

-- Create tool table.
CREATE TABLE dbo.Tool
  (
     ID   INT IDENTITY NOT NULL PRIMARY KEY,
     NAME VARCHAR(40) NOT NULL
  );

GO

-- Inserting values into products table.
INSERT INTO dbo.Tool
            (NAME)
VALUES      ('Screwdriver'),
            ('Hammer'),
            ('Saw'),
            ('Shovel');

GO

-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE  NAME = 'Saw';

GO

SELECT *
FROM   dbo.Tool;

GO

-- Try to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO dbo.Tool
            (ID,
             NAME)
VALUES      (3,
             'Garden shovel');

GO

-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON;

GO

-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool
            (ID,
             NAME)
VALUES      (3,
             'Garden shovel');

GO

SELECT *
FROM   dbo.Tool;

GO

-- Drop products table.
DROP TABLE dbo.Tool;

GO 
7
StackUser

Vous pouvez le faire en 4 étapes

  1. Créer une nouvelle colonne
  2. Copier des données dans cette colonne
  3. Supprimer l'ancienne colonne
  4. Renommer une nouvelle colonne en ancienne
5
Abdul Hannan Ijaz