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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top