Hej! Man använder en cursor lämpligtvis. Men först bör du fråga dig själv om du verkligen behöver en cursor eller inte. De är inte särskilt fördelaktiga prestandamässigt. KAn du inte förklar mer i detalj vad du vill göra. Finns kanske ett mer effektivt sätt att göra det på. Hej! Helt OK med cursor i detta fall!Loopa i en Stored procedures
Jag skulle vilja loopa genom ett resultat i en stored procedure men vet inte hur man gör.
Jag ställer en SQL-fråga som alltid kommer att ge mer än en rad som svar. Jag vill sedan använda dessa rader en efter en ungefär som i ASP när man gör
<code>do until rs.EOF </code> eller liknande
Hur gör man detta direkt i en Stored Procedure???
/FredrikSv: Loopa i en Stored procedures
Om du talar om för oss vad du vill göra mer precist, så kanske vi kan lösa det utan cursor. Annars kan du slå upp cursor i Books Online eller på MSDN så bör du hitta en guide för hur man gör.Sv: Loopa i en Stored procedures
Sv: Loopa i en Stored procedures
Jag hittade hur man gör med cursors och jag tror jag har löst problemet men om det finns ett mer effektivt sätt så är jag själklart intresserad av den bästa lösningen.
Vad jag gör är att jag plockar fram emailadresser ur en tabell och skickar mail till dessa personer.
Dock ska innehållet delvis variera beroende på vem som är mottagare.
Vidare har jag tänkt detta ska köras en gång per dygn med hjälp av en trigger i databasen.
<code>
ALTER PROCEDURE dbo.sp_send_alertMail
AS
DECLARE
@devID varchar(10),
@to varchar(100),
@subject varchar(100),
@message varchar(4000)
DECLARE dev_cursor CURSOR FOR
SELECT D.DevID, U.Email
FROM DATA_Deviation D
INNER JOIN DATA_Users U ON D.IssuedBy=U.UserID
WHERE DATEDIFF(Day, CreateDate, getdate())>150 AND D.Concluded=0
OPEN dev_cursor
FETCH NEXT FROM dev_cursor INTO @devID, @to
WHILE @@FETCH_STATUS = 0
BEGIN
SET @subject = 'Påminnelse angående ärende nr' + @devID
SET @message ='Du måste åtgärda ärende: ' + @devID
EXEC sp_send_cdosysmail 'noreply@abcdefg.se',
@to,
null,
null,
@subject,
@message
FETCH NEXT FROM dev_cursor INTO @devID, @to
END
CLOSE dev_cursor
DEALLOCATE authors_cursor
</code>Sv: Loopa i en Stored procedures
Kolla dock på olika sorters cursors (ex. FAST_FORWARD), då de är snabbare/använder mindre resurser.
/Kalle