Pourquoi une fuite SET lancer de manière incompatible une erreur dans SQL?
-
13-09-2019 - |
Question
Je regarde une erreur d'un de nos applications Web, et il a été d'appeler une procédure stockée qui était responsable de la mise à jour d'un enregistrement dans la base de données.
Cette procédure stockée a travaillé pendant des semaines sans problème. Puis un jour, il a commencé à lancer des erreurs, alors que le débogage, nous avons trouvé la cause d'être à l'intérieur de la procédure stockée.
Il avait en fait une déclaration comme ceci
Begin
// Do Stuff
Set
End
Ainsi, le SET
n'a jamais mis quoi que ce soit. Pour une raison quelconque cela va parfaitement bien sur notre serveur, et fonctionnait très bien sur un serveur client jusqu'à ce que plus tôt aujourd'hui quand il a décidé de commencer à se plaindre. (Erreur de syntaxe incorrecte)
Y at-il tout type de paramètre SQL Server qui causerait ce brusque changement de comportement?
Précision - Le SET
a toujours été dans les procédures. Et l'exécution d'un SET
par lui-même, ou comme une déclaration unique dans une procédure stockée ne fonctionne en fait pour moi. C'est le problème, il ne devrait pas travail. Donc, il y a quelque chose qui lui ferait quand il fonctionne manquerions?
La solution
Une procédure avec un SET
comme qui normalement ne parviennent pas à compiler, même si le SET
ne peut pas être atteint:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
Depuis l'alter échoue, je ne vois pas comment la procédure pourrait se retrouver dans votre base de données en premier lieu?
Ou peut-être que vous fonctionnez en mode de compatibilité pour SQL Server 2000 (qui encore permis cela.) Modification de la compatibilité Mdoe serait alors à SQL Server 2005 ou supérieur briser la procédure.
Autres conseils
Exécuter « SET », par lui-même, va générer une erreur. Je vais d'abord suggérer que vous pourriez avoir le code de branchement (FI, RETOURS, GOTO, etc.) qui ont causé la ligne de ne jamais être atteint ... mais je trouve que je ne peux pas créer une procédure stockée qui contient cela comme un stand- déclaration seule.
Si vous scripter la procédure et essayer de le recréer (avec un nom différent), peut-il être créé?
Peut-être vaut l'affichage de ce script, ou autant de travail que vous êtes public installer confortablement.