Ein cursor mit dem Namen ... es gibt bereits einen SQL Server 2008
Ich habe einen trigger, der verwendet wird, um einige auditing-Aufgaben, wenn änderungen in einer Tabelle. Innerhalb dieser trigger es gibt eine WHILE-Schleife, in der Schleife ist ein cursor deklariert ist, verwendet, geschlossen und dann freigegeben, bevor die nächste iteration der Schleife.
Wenn ich eine gespeicherte Prozedur aufrufen, ändert sich die Tabelle und die wiederum bewirkt, dass der Auslöser ausgeführt wird, und ich dies innerhalb des Management Studio, alles funktioniert wie erwartet.
Jedoch, wenn diese gespeicherte Prozedur aufgerufen wird, aus der Java-web-Anwendung, bekomme ich die Fehlermeldung: "Ein cursor mit dem Namen ... ist bereits vorhanden".
Gibt es einen Grund, warum diese gespeicherte Prozedur funktionieren würde, wenn ich es ausführen manuell, und nicht Arbeit, wenn Sie von der web-Anwendung?
InformationsquelleAutor t0mm0d | 2011-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie möglicherweise über den GLOBALEN Cursor, die zu Problemen führen könnte, wie diese.
Wenn Sie müssen, verwenden von Cursorn:
Wenn Sie können, verwenden Sie die LOKALE Cursor in all Ihren code.
z.B. declare cursor-Anweisung mit der "LOCAL" - Schlüsselwort, wie diese:
InformationsquelleAutor Moe Sisko
Können Sie auch versuchen, diese
InformationsquelleAutor Manjunath P
Klingt ein wenig wie es genannt wird, durch mehrere threads und somit bereits vorhanden ist, wenn der zweite thread versucht, den Namen zu verwenden. Sie könnten versuchen, die Benennung des Cursors mit einer GUID in den Namen etc. Ich würde nicht empfehlen, diesen Ansatz.
Ich schlage vor, Sie entfernen Sie den cursor von Ihrem trigger-code, wenn möglich, zugunsten eines set-basierten Ansatz. Overhead Verwendung eines Cursors innerhalb der trigger muss Recht hoch sein.
InformationsquelleAutor catteralld