Hallo zusammen
Ich arbeite gerade an einer Stored Procedure und habe ein paar Probleme mit Cursor.
Zuerst lese ich mit einem SELECT statement rund 650 Datensätze in eine temporäre Tabele. Dann lass ich den Cursor mit SELECT * über diese temporäre Tabelle loopen.
Beim ersten Mal aufrufen von FETCH NEXT wird schön brav der erste Datensatz gelesen, @@fetch_status ist 0. Dann führe ich ein simples Insert aus und will den nächsten Datensatz mit FETCH NEXT, und das passt ihm gar nicht und @@fetch_status wird -1, was sovill bedeutet wie "ein Fehler ist aufgetreten". Nur habe ich keine Ahnung, was für ein Fehler aufgetreten sein könnte.
Hier meine gesamte SP:
DECLARE @computerid INT
DECLARE @hostname NVARCHAR(MAX)
SELECT * INTO #tmp FROM (SELECT ia1.itemid, ia1.attributevalue AS
hostname
FROM itemattributes AS ia1
INNER JOIN (SELECT ia2.itemid, ia2.attributevalue AS username
FROM itemattributes AS ia2
WHERE ia2.state LIKE 'active'
AND ia2.attributeid = 45)
AS t ON t.itemid = ia1.itemid
WHERE ia1.state LIKE 'active' AND ia1.attributeid = 39) AS tab1
DECLARE MyCursor CURSOR FOR
SELECT * FROM #tmp
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @computerid, @hostname -- funzt!!
WHILE @@fetch_status = 0
BEGIN
INSERT INTO temp (id, asdf) VALUES (@computerid, @hostname) --
funzt auch !!
FETCH NEXT FROM MyCursor INTO @computerid, @hostname -- funzt nicht mehr!!!
END
CLOSE MyCursor
DEALLOCATE MyCursor
DROP TABLE #tmp
Ich arbeite gerade an einer Stored Procedure und habe ein paar Probleme mit Cursor.
Zuerst lese ich mit einem SELECT statement rund 650 Datensätze in eine temporäre Tabele. Dann lass ich den Cursor mit SELECT * über diese temporäre Tabelle loopen.
Beim ersten Mal aufrufen von FETCH NEXT wird schön brav der erste Datensatz gelesen, @@fetch_status ist 0. Dann führe ich ein simples Insert aus und will den nächsten Datensatz mit FETCH NEXT, und das passt ihm gar nicht und @@fetch_status wird -1, was sovill bedeutet wie "ein Fehler ist aufgetreten". Nur habe ich keine Ahnung, was für ein Fehler aufgetreten sein könnte.
Hier meine gesamte SP:
DECLARE @computerid INT
DECLARE @hostname NVARCHAR(MAX)
SELECT * INTO #tmp FROM (SELECT ia1.itemid, ia1.attributevalue AS
hostname
FROM itemattributes AS ia1
INNER JOIN (SELECT ia2.itemid, ia2.attributevalue AS username
FROM itemattributes AS ia2
WHERE ia2.state LIKE 'active'
AND ia2.attributeid = 45)
AS t ON t.itemid = ia1.itemid
WHERE ia1.state LIKE 'active' AND ia1.attributeid = 39) AS tab1
DECLARE MyCursor CURSOR FOR
SELECT * FROM #tmp
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @computerid, @hostname -- funzt!!
WHILE @@fetch_status = 0
BEGIN
INSERT INTO temp (id, asdf) VALUES (@computerid, @hostname) --
funzt auch !!
FETCH NEXT FROM MyCursor INTO @computerid, @hostname -- funzt nicht mehr!!!
END
CLOSE MyCursor
DEALLOCATE MyCursor
DROP TABLE #tmp
Comment