web-dev-qa-db-fra.com

Activation ou désactivation de l'identité dans SQL Server

Je souhaite désactiver la propriété Is Identity d'une colonne et après l'insertion d'une valeur explicite, l'activer à nouveau.J'ai écrit cette requête:

SET IDENTITY_INSERT Tbl_Cartoons OFF

Bien que l'exécution soit réussie, rien ne change dans la conception de la table ..__ S'il vous plaît suggérer une solution, c'est vraiment crucial.

11
user1831490

Tout ce que vous avez indiqué est de désactiver l’identité afin de pouvoir insérer des valeurs spécifiques dans votre colonne d’identité (généralement nécessaire pour les opérations uniques, telles que le transfert de données). L'identité est toujours présente sur la colonne, on ne fait rien dessus. Conceptuellement, cela est similaire à la différence entre désactiver et supprimer les déclencheurs.

Supprimer complètement l'identité de la colonne est plus difficile. La question la couvre , mais l'idée de base est que vous devez créer une nouvelle colonne, copier les données, puis supprimer la colonne d'identité.

5
Jon Egerton

Vous souhaitez réellement utiliser SET IDENTITY_INSERT Tbl_Cartoons ON avant de tenter d'insérer des valeurs explicites.

Vous dites que "Ije vais être responsable de l'insertion de valeurs dans la colonne IDENTITY".

SET IDENTITY_INSERT Tbl_Cartoons OFF dit "Je laisserai au système la responsabilité d'insérer des valeurs dans la colonne IDENTITY".

24
Damien_The_Unbeliever

Pour insérer des valeurs explicites dans la colonne d'identité, procédez comme suit:

SET IDENTITY_INSERT Tbl_Cartoons  ON
GO

-- code to insert explicit ID values

SET IDENTITY_INSERT Tbl_Cartoons  OFF
GO
12
Vadim Tychonoff

La session qui définit SET IDENTITY_INSERT est autorisée à entrer des valeurs explicites.

Mais la colonne est toujours une colonne d'identité. C'est juste que votre session peut ignorer la contrainte d'identité.

6
Andomar

Définissez identity_insert sur pour pouvoir définir explicitement la valeur de la colonne id. Réglez-le à nouveau pour l'attribuer automatiquement.

1
cf_en

Vous pouvez désactiver la propriété Identity, mais cela implique la modification de tables système, ce qui n'est pas considéré comme une bonne pratique . Il est également peu probable que vous disposiez des droits nécessaires et vous verrez probablement You do not have permission to run the RECONFIGURE statement essayer le code suivant:

DECLARE @tableName nvarchar(128) = 'YourTable';

-- Get a list of identity columns (informational)
SELECT OBJECT_NAME(object_id) tableName, sc.name colName, st.name dataType
FROM sys.columns sc
JOIN sys.types st
    ON st.system_type_id = sc.system_type_id
WHERE sc.is_identity = 1
AND OBJECT_NAME(object_id) = @tableName

-- Allow ad-hoc changes to system catalogs
EXEC  sp_configure 'allow update', 1
GO
reconfigure with override
GO
-- Eliminate the identityness
UPDATE syscolumns SET colstat = colstat - 1
WHERE id = object_id(@tableName)
AND name = 'Id' -- Specify column if you like, though only one identity per table is currently supported
GO
-- Unallow ad-hoc changes to system catalogs
exec sp_configure 'allow update', 0
GO
reconfigure with override
GO
0
Charles Burns