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 :
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
Mais, en fait, la procédure s'arrête au
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Exec pColonnePere
        @Reussi = @RetourProc OUTPUT;
Alors, le contenu du While ne vient pas affecter ma procédure. (pour simplifier le message)

Donc voici le code de mon autre procédure pColonnePere :
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
Elle ne se rend même pas à la première ligne de ma procédure, serait-ce dans la déclaration ?

Merci,

Évans