"Larigue34" wrote in message news:123eb01c417da$1f11b4e0$
comment faire transformer une colonne IDENTITY en IDENTITY NOT FOR REPLICATION en utilisant un script SQL?
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.
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.
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
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)')
"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.
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)')
"Larigue34" <anonymous@discussions.microsoft.com> wrote in message
news:172f701c41801$bb772c80$a101280a@phx.gbl...
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.
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)')
"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.