Colonne IDENTITY

Le
Larigue34
comment faire transformer une colonne IDENTITY en
IDENTITY NOT FOR REPLICATION
en utilisant un script SQL?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bruno reiter [MVP]
Le #11722901
pas modifiable, il faut enlever et remettre :-(

br

"Larigue34" news:123eb01c417da$1f11b4e0$
comment faire transformer une colonne IDENTITY en
IDENTITY NOT FOR REPLICATION
en utilisant un script SQL?


Larigue34
Le #11722851
Ok pour un drop column puis un add column,
mais les données d'origine (des identifiants utilisés en
FK ...) vont etre modifiées.
Cette solution n'est donc pas envisageable
car il faut absolument que je conserve
les données d'origine.

J'ai remarqué que dans SQL Entreprise Manager il est
possible de faire cette manip même sur une table
comportant des données.

Il doit donc exister une solution.

J'ai des dizaines de tables a modifier chez des dizaines
de clients et j'ai donc
besoin d'un script.
Sylvain Lafontaine
Le #11328671
Vous devez créer une table temporaire avec la bonne structure, copier vos
données dedans puis effacer l'ancienne et renommer votre table temporaire.
C'est comme cela que procède SQL Enterprise Manager. Si vous avez des
contraintes Foreign Keys, vous devez les enlever avant et les remettres
après.

Voici un échantillon de procédure pris dans VS.NET:

BEGIN TRANSACTION

SET QUOTED_IDENTIFIER ON

SET ARITHABORT ON

SET NUMERIC_ROUNDABORT OFF

SET CONCAT_NULL_YIELDS_NULL ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

COMMIT

BEGIN TRANSACTION

CREATE TABLE dbo.Tmp_Table1

(

Id int NOT NULL IDENTITY (1, 1) NOT FOR REPLICATION,

Id2 char(10) NULL,

) ON [PRIMARY]

GO

SET IDENTITY_INSERT dbo.Tmp_Table1 ON

GO

IF EXISTS(SELECT * FROM dbo.Table1)

EXEC('INSERT INTO dbo.Tmp_Table1 (Id, Id2)

SELECT Id, Id2 FROM dbo.Table1 (HOLDLOCK TABLOCKX)')

GO

SET IDENTITY_INSERT dbo.Tmp_Table1 OFF

GO

DROP TABLE dbo.Table1

GO

EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'

GO

ALTER TABLE dbo.Table1 ADD CONSTRAINT

PK_Table1 PRIMARY KEY CLUSTERED

(

Id

) ON [PRIMARY]

GO

COMMIT

"Larigue34" news:172f701c41801$bb772c80$

Ok pour un drop column puis un add column,
mais les données d'origine (des identifiants utilisés en
FK ...) vont etre modifiées.
Cette solution n'est donc pas envisageable
car il faut absolument que je conserve
les données d'origine.

J'ai remarqué que dans SQL Entreprise Manager il est
possible de faire cette manip même sur une table
comportant des données.

Il doit donc exister une solution.

J'ai des dizaines de tables a modifier chez des dizaines
de clients et j'ai donc
besoin d'un script.
Publicité
Poster une réponse
Anonyme