| 

.NET C# Java Javascript Exception

4
Moin,

ich sitze hier gerade etwas auf dem Schlauch. Hier ist eine Prozedur, die eigentlich schon seit Jahren funktioniert und jetzt auf einmal rumzickt. Zusammengefasst sieht die Prozedur in etwa so aus:

DECLARE @SQL NVARCHAR(max)
DECLARE @SourceDB NVARCHAR(255) = '[Datenbank1]'
DECLARE @TargetDB NVARCHAR(255) = '[Datenbank2]'
DECLARE @Param1 INT = 1
DECLARE @Param2 INT = 2
DECLARE @Var1 INT
DECLARE @Var2 INT

SET @SQL = ' DECLARE Cursor_Test CURSOR FOR
SELECT n.ItemID, np.ItemID
FROM ' + @SourceDB + '.Datenbank.Tabelle o,
' + @SourceDB + '.Datenbank.Tabelle op,
' + @TargetDB + '.Datenbank.Tabelle n,
' + @TargetDB + '.Datenbank.Tabelle np
WHERE o.Feld = ' + CONVERT(VARCHAR, @Param1) + '
AND op.Feld = ' + CONVERT(VARCHAR, @Param1) + '
AND n.Feld = ' + CONVERT(VARCHAR, @Param2) + '
AND np.Feld = ' + CONVERT(VARCHAR, @Param2)

EXEC (@SQL)

OPEN Cursor_Test

FETCH NEXT
FROM Cursor_Test
INTO @Var1
,@Var2

WHILE @@Fetch_Status = 0
BEGIN
-- Hier wird gearbeitet
FETCH NEXT
FROM Cursor_Test
INTO @Var1
,@Var2
END

CLOSE Cursor_Test
DEALLOCATE Cursor_Test


Als Fehler bekomme ich jetzt 4x (Open, Fetch, Close und Deallocate, in die While-Schleife geht er natürlich nicht):
Msg 16916, Level 16, State 1, Line 25
Ein Cursor mit dem Namen 'Cursor_Test' ist nicht vorhanden.


Jetzt sitze ich hier und überlege warum.

Was ich probiert habe:

  • Den Select Teil vom SQL-String ausgegeben und allein ausgeführt. Funktioniert und gibt Werte zurück.
  • Den Cursor nicht dynamisch deklariert. Dann funktioniert es auch.
  • Einen anderen Cursor dynamisch deklariert (auch Datenbankübergreifend) und ausgeführt. Der funktioniert.


Warum funktioniert diese Cursor nicht, wenn ich ihn dynamisch erstelle?

Edit:
Nicht eine wirkliche Lösung, mehr ein Workaround:
Wenn man das Select in eine temp. Tabelle schreibt und danach den Cursor auf die temp. Tabelle los lässt (nicht dynamisch), dann funktioniert es. Ist zumindest mal ein Workaround, damit die Leute wieder arbeiten können. Eine echte Lösung bzw. Erklärung hätte ich aber eigentlich gerne noch.
17.04.2012
Feroc 1,2k 1 9
Feroc 1,2k 1 9
1 Antwort
0
Könnte es sich um ein Berechtigungsproblem handeln? Hat dein effektiver User EXEC Rechte für die Prozedur? Falls die scheitert ist das Cursor_Test hinterher natürlich nicht definiert.
17.04.2012
puls200 3,7k 6
Das ist es leider nicht. Für die Tests bin ich als sa drin und EXEC an sich ist kein Problem.
Feroc 17.04.2012

Stelle deine T-sql-Frage jetzt!