Bonjour,

J'ai un petit souci au niveau des drop de colonne d'une table et des transactions. En effet, je desire creer une table T1 a partir d'une autre table T2. Dans T1, je copie une colone de T2 et j efface cette colonne de T2. Je effacer la colonne que si la copie a fonctionne. Je desire donc creer une transaction pour la copie. Si elle a reussi, j efface la colonne.
Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
BEGIN TRANSACTION
BEGIN TRANSACTION
CREATE TABLE [DIN] (
	[Id] [bigint] NOT NULL ,
	[DIN_Num] [varchar] (20) COLLATE French_CI_AS NOT NULL ,
	[Zge_Id] [bigint] NULL,
	[Ordre] [int] NOT NULL ,
	CONSTRAINT [PK_DIN] PRIMARY KEY  CLUSTERED 
	(
		[Id]
	) WITH  FILLFACTOR = 90  ON [PRIMARY] ,
	CONSTRAINT [FK_DIN_ZoneGeo] FOREIGN KEY 
	(
		[Zge_Id]
	) REFERENCES [ZoneGeo] (
		[Id]
	) 
) ON [PRIMARY]
--GO
 
 
exec sp_addextendedproperty N'MS_Description', N'Dialogue de discordance d’appareils à position habituelle affecté à la zone géographique ', N'user', N'dbo', N'table', N'DIN'
 
--GO
 
exec sp_addextendedproperty N'MS_Description', N'Identifiant unique au PT', N'user', N'dbo', N'table', N'DIN', N'column', N'Id'
--GO
exec sp_addextendedproperty N'MS_Description', N'Numéro du dialogue DIN', N'user', N'dbo', N'table', N'DIN', N'column', N'DIN_Num'
--GO
exec sp_addextendedproperty N'MS_Description', N'Zone géographique de rattachement du dialogue DIN', N'user', N'dbo', N'table', N'DIN', N'column', N'Zge_Id'
--GO
exec sp_addextendedproperty N'MS_Description', N'Ordre de classement des DIN', N'user', N'dbo', N'table', N'DIN', N'column', N'Ordre'
 
 
--GO
 
-- on renseigne la nouvelle table avec les DIN déjà saisis
DECLARE @DIN_Num sysname
DECLARE @Id_Zge bigint
DECLARE @Zge_Num sysname
DECLARE @cpt bigint
DECLARE @ordre int
DECLARE @pt sysname
 
SET @pt=(select db_name())
SET @ordre = 1
 
DECLARE C CURSOR FOR SELECT Id, Zge_Num, Zge_DINNum 
FROM  ZoneGeo
WHERE Zge_DIN = '1'
OPEN C
FETCH NEXT FROM C INTO @Id_Zge, @Zge_Num, @DIN_Num
WHILE @@FETCH_STATUS = 0
BEGIN
	-- lecture du compteur d'id (+1)	
	SET @cpt=(SELECT Max(Pl_Compteur)+1 FROM POSTES..PlanT 	
	WHERE Id = (SELECT In_Pl_Id FROM POSTES..Indice WHERE In_Bd_Pt = @pt))
 
	--si on tombe sur plusieurs DIN identiques ou aucun nuléro de DIN
	IF @DIN_NUM IS NULL
	BEGIN
		SET @DIN_NUM = '9999_' +@Zge_Num 
	END
	ELSE IF EXISTS(SELECT DIN_Num FROM DIN WHERE DIN_Num=@DIN_Num)
	BEGIN
		SET @DIN_Num = @DIN_Num +'_' +@Zge_Num
	END
 
	INSERT INTO DIN (Id, DIN_Num, Zge_Id, Ordre) VALUES (@cpt, @DIN_Num, @Id_Zge, @ordre)
 
	-- on met à jour les renvois
--	UPDATE Renvoi
--	SET Renv_Table = 'DIN', Renv_Col = 'DIN_Num', Renv_Cle1 = @cpt	
--	WHERE Renv_Table = 'ZoneGeo' AND Renv_Col = 'Zge_DINNum' AND Renv_Cle1=@Id_Zge
 
	SET @ordre=@ordre+1
 
	-- mise à jour du compteur
	UPDATE POSTES..PlanT SET Pl_Compteur = @cpt 
	WHERE Id =(SELECT In_Pl_Id FROM POSTES..Indice WHERE In_Bd_Pt = @pt)
 
	FETCH NEXT FROM C INTO @Id_Zge, @Zge_Num, @DIN_Num
 
 
 
END
CLOSE C
DEALLOCATE C
COMMIT
 
ALTER TABLE dbo.ZoneGeo
	DROP COLUMN Zge_DIN
ALTER TABLE dbo.ZoneGeo
	DROP COLUMN Zge_DINNum
Le probleme est que ca ne fonctionne pas. j obtient le message d erreur m'indiquant que la colonne Zge_DIN n existe pas, en pointant sur la declaration du curseur.

Comment faire????

Merci d'avance.