Cursors behövs ganska sällan. Det går oftast att göra det (mycket effektivare) med ett statement (med lite subquries och härledda tabeller så går det mesta att ordna). Lite exempel kod: Iofs är det bättre med en loop och en variabel än en cursor, men eftersom SQL är ett set-baserat språk och inte ett radbaserat så ska man helst inte göra så heller. Försök alltid hitta en set-baserad lösning. I det exempel som Andreas använde så är den ju självklar (nedan), men i andra fall kan det ibland vara svårt att hitta en set-baserad lösning. Det går dock nästan alltid, ibland får man ta till lite trick med ex. vyer eller andra hjälpmedel, bara man slipper cursors iaf.Cursors...
Hej.
Några frågor: (från en som vill lära sig rätt)
Läste i en annan tråd att man inte skall använda cursors.
Har hört det från annat håll också...
Varför? Vad är alternativet? Temptabeller i en loop?
Hur gör man för att skriva ut lite "slaskvärden" i när man testar sin SP i QA?
Likt Vb:s Debug.Print... Vart står det? Messages??
Ha det gott i den varmaste sommaren på över 100 år :-)
//fredda Sv: Cursors...
Temporära tabeller är oftast bättre än en cursor, men det beror på vad du gör vad som är lämpligt.
Använd PRINT för utskrifter i en procedur.Sv: Cursors...
USE Northwind
DECLARE @CategoryID INT
SET @CategoryID = (SELECT MIN(CategoryID) FROM dbo.Categories)
WHILE @CategoryID IS NOT NULL
BEGIN
PRINT @CategoryID
SET @CategoryID = (SELECT MIN(CategoryID) FROM dbo.Categories WHERE CategoryID > @CategoryID)
END Sv: Cursors...
select categoryid from categories
Ang. 'debugtext', så ställ in QA på att köra i text mode (Ctrl-T) så får du både resultat och text (debug och annan) i samma fönster. Dessutom slipper du förlora en massa minnesresurser på att griden ska byggas upp.