Warum wird auf einen hinteren inkonsequent einen Fehler in SQL zu werfen?
-
13-09-2019 - |
Frage
Ich betrachte einen Fehler von einem unserer Web-Anwendungen, und es wurde eine gespeicherte Prozedur aufrufen, die für die Aktualisierung eines Datensatzes in der Datenbank verantwortlich ist.
Diese gespeicherte Prozedur ist seit Wochen ohne Probleme gearbeitet. Einen Tag begann es Fehler zu werfen, während des Debuggen wir die Ursache gefunden innerhalb der gespeicherten Prozedur zu sein.
Es hatte im Grunde eine Aussage wie diese
Begin
// Do Stuff
Set
End
So ist die SET
eigentlich nie etwas gesetzt. Aus irgendeinem Grunde läuft dies auf unserem Server in völlig in Ordnung, und lief bis heute bereits auf einem Client-Server in Ordnung, wenn es beschlossen beschwert zu starten. (Falsche Syntaxfehler)
Gibt es eine Art von SQL Server-Einstellung, die diese plötzliche Änderung im Verhalten verursachen würde?
Klarstellung - Die SET
hat in den Verfahren immer. Und der Betrieb ein SET
selbst oder als einzige Anweisung in einer gespeicherten Prozedur in der Tat für mich arbeiten. Das ist das Problem, es sollte nicht Arbeit. So ist es etwas, das es würde dazu führen, zu arbeiten, wenn es versagt werden sollte?
Lösung
Ein Verfahren mit einem SET
wie das normalerweise nicht kompilieren, selbst wenn der SET
kann nicht erreicht werden:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
Da das Alter nicht, ich kann nicht sehen, wie das Verfahren in Ihrer Datenbank in erster Linie könnte am Ende?
Vielleicht waren Sie im Kompatibilitätsmodus für SQL Server 2000 ausgeführt wird (die dies noch erlaubt.) Ändern der Kompatibilität MDOE auf SQL Server 2005 oder höher würde dann das Verfahren brechen.
Andere Tipps
Ausführen „SET“, von selbst, wird ein Fehler generiert. Ich wollte ursprünglich vor, dass Sie haben Code könnte Verzweigung (IfS, Returns, GOTOs, etc.), die die Linie verursacht nie erreicht werden ... aber ich finde, dass ich nicht eine gespeicherte Prozedur, die dies als Stand enthält erstellen allein Aussage.
Wenn Sie die Prozedur Skript aus und versuchen, es neu zu erstellen (mit einem anderen Namen), kann es angelegt werden?
könnte sich lohnen das Skript veröffentlichen, oder so viel davon wie Ihr bequem machen öffentlich sind.