Bonjour,
J'ai SQL Server 2005 sur un ordinateur et je suis capable d'exécuter mes procédures stockées et tout sans anicroches. Cependant, si je vais sur un autre ordinateur qui possède lui aussi SQL Server 2005, quelques unes de mes procédures stockées se terminent en me faisant une erreur, la 468. Je n'ai rien trouvé sur MSDN concernant cette erreur...
De plus, je ne sais pas si ceci pourrait en être la cause, car entre les deux SQL Server, le premier (celui qui fonctionne) est sous FRENCH_CI_AS tandis que l'autre est sur SQL_Latin1_General_CP1_CI_AS. Mais, dans mes procédures qui ne fonctionnent plus, je n'utilise pas de nombres à virgules, qui je crois était une des différences entre les deux langues.
Voici le code de ma procédure qui fonctionne sous l'un et non sous l'autre :
Mais, en fait, la procédure s'arrête au
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 CREATE PROCEDURE EqKilbridgeWester ( @ListeOptions nvarchar(1000), @ListeSG nvarchar(1000), @Tps_Cycle float, @Code_methode nvarchar(10), @VerifCouple bit, @VerifZones bit, @VerifCompt bit, @Reussi bit = 0 output) WITH ENCRYPTION AS SET NOCOUNT OFF DECLARE @SQL nvarchar(1000), @NbrElemNonPlace int, @RetourProc int; --Création de la table temporaire qui servira pour garder -- certaines informations des éléments CREATE TABLE #Temp_Elements( No_element char(5), No_Colonne int, Tps_elem float, Fait bit DEFAULT 0 ); -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- BEGIN TRY BEGIN TRANSACTION --Insertion des informations des éléments dans la table temporaire -- (No_element, Tps_elem, Prédécesseurs) Set @SQL ='Insert into #Temp_Elements(No_element, Tps_elem) Select e.No_element, e.Tps_elem from Elements e where e.No_element IN ( Select d.No_element from Diag_Options d where d.Code_option IN ( Select o.Code_option from Options o where o.Code_option IN (' + @ListeOptions + ') UNION Select o2.Code_option from Options o2 where o2.Obligatoire_opt = 1 AND (o2.Code_Option NOT IN ( Select do.Option_1 from Dependance_Opt do) OR o2.Code_Option NOT IN ( Select do2.Option_2 from Dependance_Opt do2)))) INTERSECT Select e.No_element, e.Tps_elem from Elements e where e.No_element NOT IN ( Select e2.No_element from Elements e2 where e2.code_sgrpe IN (' + @ListeSG + '));'; Exec sp_executesql @SQL; Exec pColonnePere @Reussi = @RetourProc OUTPUT; Select @NbrElemNonPlace=count(*) from #Temp_Elements; if @RetourProc = 1 BEGIN WHILE @NbrElemNonPlace > 0 BEGIN ... END; COMMIT TRANSACTION --Affectation de 1 si la procédure s'est complétée Set @Reussi = 1; END TRY
Alors, le contenu du While ne vient pas affecter ma procédure. (pour simplifier le message)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Exec pColonnePere @Reussi = @RetourProc OUTPUT;
Donc voici le code de mon autre procédure pColonnePere :
Elle ne se rend même pas à la première ligne de ma procédure, serait-ce dans la déclaration ?
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 CREATE PROCEDURE pColonnePere ( @Reussi int = 0 output) WITH ENCRYPTION AS SET NOCOUNT OFF DECLARE @No_element_pere char(5), @No_element_fils char(5), @Col_elem int; --Création de la table temporaire qui servira pour garder -- certaines informations des éléments CREATE TABLE #Temp_Colonne( No_element char(5), Fait bit DEFAULT 0 ) BEGIN TRY BEGIN Transaction Insert into #Temp_Colonne(No_element) Select No_element from #Temp_Elements; Update #Temp_Colonne set Fait = 1 where No_element NOT IN ( Select No_elem_fils from Preseances); Update #Temp_Elements set No_Colonne = 1 where No_element NOT IN ( Select No_elem_fils from Preseances); WHILE 1=1 BEGIN ... END; set @Reussi = 1; COMMIT TRANSACTION END TRY
Merci,
Évans
Partager