SQL Server, Erreur numéro 468 ?
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:
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:
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:
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