Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Colonne IDENTITY

3 réponses
Avatar
Larigue34
comment faire transformer une colonne IDENTITY en
IDENTITY NOT FOR REPLICATION
en utilisant un script SQL?

3 réponses

Avatar
bruno reiter [MVP]
pas modifiable, il faut enlever et remettre :-(

br

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


Avatar
Larigue34
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.
Avatar
Sylvain Lafontaine
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" wrote in message
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.