Fehler in @@FETCH_STATUS ???

10/03/2008 - 16:59 von Uwe Ricken | Report spam
Hallo werte SQL-Gemeinde,

mich plagt heute den ganzen Tag bereits ein Phànomen, dem ich beim besten
Willen nicht mehr nachfolgen kann.

Ich habe eine Prozedur, in der mittels eines Cursors eine Rechnungsnummer
generiert und eingetragen wird.
Der Code dazu sieht wie folgt aus:

DECLARE @InvoiceNumber varchar(20)

DECLARE InvoiceCursor CURSOR LOCAL
FOR
SELECT ICId
FROM dbo.tblInvoiceCopy
WHERE ProcessId = @ProcessId
ORDER BY ICId

OPEN InvoiceCursor

FETCH NEXT FROM InvoiceCursor INTO @InvoiceId
WHILE (@@FETCH_STATUS <> -1)
BEGIN
UPDATE dbo.tblInvoiceCopy
SET Number = @InvoiceNumber
WHERE ICId = @InvoiceId

SET @InvoiceNumber = @InvoiceNumber + 1^
FETCH NEXT FROM InvoiceCursor INTO @InvoiceId
END

CLOSE InvoiceCursor
DEALLOCATE InvoiceCursor

Zur Tabelle:
ICId ist IDENTITY
Ansonsten ist kein CONSTRAINT definiert

Ein UPDATE-Trigger in der Relation aktualisiert zwei Spalten nach einem
Update
CREATE TRIGGER dbo.trg_tblInvoiceCopy_Update
ON dbo.tblInvoiceCopy
FOR
SET NOCOUNT ON

UPDATE iv
SET iv.UpdateUser = user_name(),
iv.UpdateDate = getdate()
FROM dbo.tblInvoiceCopy iv INNER JOIN inserted i
ON (iv.ICId = i. ICId)

SET NOCOUNT OFF
GO

Das System bleibt beim Laufen der Prozedur dann leider in einer
Endlosschleife;
soll heißen dass @@FETCH_STATUS IMMER 0 ist!

Das ist mir unerklàrlich. Selbst beim Debuggen ist klar zu erkennen, dass
der
Cursor in einer Endlosschleife bleibt.

Zur Umgebung:
SQL Server 2000
SP 4 installiert.

Ich brüte nun schon seit fast 6 Stunden über diesem Problem und habe einfach
keine Erklàrungen mehr dafür.
Zunàchst dachte ich, dass durch den Trigger ev. das Offset veràndert wird.
Kann ich aber ausschließen - zumal der Cursor geordnet nach ICId (Primiary
Key) vorliegt.

Vielen Dank für Eure Hilfe...

Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

db-Berater GmbH - 64390 Erzhausen
http://www.db-berater.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm
 

Lesen sie die antworten

#1 Uwe Ricken
10/03/2008 - 17:25 | Warnen spam
Dann spiele ich mal die Ingrid ;-)

Ich habe gerade noch einmal die Tabelle untersucht und festgestellt,
dass auf dem Attribut [Number] und [InvoiceDate] noch ein
geclusterter Index liegt.

Kann es sein, das - obwohl ich nach ICId sortiere - eine eignee
Sortierung im Cursor greift?

Ich bin da etwas ratlos ;-(

Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

db-Berater GmbH - 64390 Erzhausen
http://www.db-berater.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm
"Uwe Ricken" schrieb im Newsbeitrag
news:
Hallo werte SQL-Gemeinde,

mich plagt heute den ganzen Tag bereits ein Phànomen, dem ich beim besten
Willen nicht mehr nachfolgen kann.

Ich habe eine Prozedur, in der mittels eines Cursors eine Rechnungsnummer
generiert und eingetragen wird.
Der Code dazu sieht wie folgt aus:

DECLARE @InvoiceNumber varchar(20)

DECLARE InvoiceCursor CURSOR LOCAL
FOR
SELECT ICId
FROM dbo.tblInvoiceCopy
WHERE ProcessId = @ProcessId
ORDER BY ICId

OPEN InvoiceCursor

FETCH NEXT FROM InvoiceCursor INTO @InvoiceId
WHILE (@@FETCH_STATUS <> -1)
BEGIN
UPDATE dbo.tblInvoiceCopy
SET Number = @InvoiceNumber
WHERE ICId = @InvoiceId

SET @InvoiceNumber = @InvoiceNumber + 1^
FETCH NEXT FROM InvoiceCursor INTO @InvoiceId
END

CLOSE InvoiceCursor
DEALLOCATE InvoiceCursor

Zur Tabelle:
ICId ist IDENTITY
Ansonsten ist kein CONSTRAINT definiert

Ein UPDATE-Trigger in der Relation aktualisiert zwei Spalten nach einem
Update
CREATE TRIGGER dbo.trg_tblInvoiceCopy_Update
ON dbo.tblInvoiceCopy
FOR
SET NOCOUNT ON

UPDATE iv
SET iv.UpdateUser = user_name(),
iv.UpdateDate = getdate()
FROM dbo.tblInvoiceCopy iv INNER JOIN inserted i
ON (iv.ICId = i. ICId)

SET NOCOUNT OFF
GO

Das System bleibt beim Laufen der Prozedur dann leider in einer
Endlosschleife;
soll heißen dass @@FETCH_STATUS IMMER 0 ist!

Das ist mir unerklàrlich. Selbst beim Debuggen ist klar zu erkennen, dass
der
Cursor in einer Endlosschleife bleibt.

Zur Umgebung:
SQL Server 2000
SP 4 installiert.

Ich brüte nun schon seit fast 6 Stunden über diesem Problem und habe
einfach keine Erklàrungen mehr dafür.
Zunàchst dachte ich, dass durch den Trigger ev. das Offset veràndert wird.
Kann ich aber ausschließen - zumal der Cursor geordnet nach ICId (Primiary
Key) vorliegt.

Vielen Dank für Eure Hilfe...

Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

db-Berater GmbH - 64390 Erzhausen
http://www.db-berater.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm

Ähnliche fragen