Hej jag skulle vara tacksam för lite tips om hur jag kan lösa detta: Är det nåt sånt här du söker? Tack för ditt svar Tomas! Sätt in resultatet med mailadresser i en temptabell eller i en tabellvariabel. Ta sedan en count på antal rader, iterera sedan med while:Loopning av tabell och anrop av mailprocedur
Jag ska uppdatera ett adressregister.
De företag som saknar en viss kod skall tilldelas en sådan.
Tilldelningen görs genom att: För de poster som saknar koden skall ett automat-mail för varje post generas för uppslagning som returneras och läggas in manuellt.
Det jag specifikt behöver hjälp med är hur man utformar en loop som genrerar automat-mailen på ett bra sätt. Ett mail per post som saknar den specifika koden.
Från en indata tabell "uppdaterad_lista as k" hämtas ny uppdaterad data som skall läggas in i
adressregistertabellen "addressRegister as ar" det finns en befintlig mail-procedur som anropas mailet skall innehålla kundnummret "kund_nr".
Exempelvis:
-- Hitta alla offentliga företag utan kundGrupp_nummer,
select k.[kund_nr]
from uppdaterad_lista as k
inner join addressRegister as ar
on k.[kund_nr] = ar.[CVR-nr]
where k.DOC_ID = @DOC_ID
and k.kundgrupp = 'offentligt' and ar.kundGrupp_number = ''
-- för varje träff skall ett mail genereras innehållandes @customerNumber = kund_nr
goto MAIL_NOTIFICATION -- mailet genereras av en procedur
-- Förenklat...
MAIL_NOTIFICATION:
Select @Message = '***** This is an automatic mail notification *****' + CHAR(10) +
'Please return the CustomerGroupNumber for the company,+ CHAR(10) +
'With Customer Number: ' + IsNull(@customerNumber, '')
EXEC @retcode = MESSAGES_SEND @DOC_ID, @Message
Tack på förhand.Sv: Loopning av tabell och anrop av mailprocedur
DECLARE @CustomerNumber int
DECLARE @Message nvarchar(MAX)
DECLARE @RetCode int
DECLARE cur CURSOR FAST_FORWARD FOR
SELECT k.kund_nr, ... FROM ... WHERE ...
OPEN cur
FETCH NEXT FROM cur INTO @CustomerNumber
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Message = 'jopphejdi' + ISNULL(@CustomerNumber, '')
EXEC @RetCode = MESSAGES_SEND @DOC_ID, @Message
-- Alternativt nåt i stil med
-- EXEC msdb.dbo.sp_send_dbmail
-- @recipients = 'a@b.c',
-- @body = @Message,
-- @subject = 'test',
-- @body_format = 'HTML';
FETCH NEXT FROM cur INTO @CustomerNumber
END
CLOSE cur
DEALLOCATE cur
Sv:Loopning av tabell och anrop av mailprocedur
Jo jag antar att jag får köra en cursor. Tänkte inte på det eftersom alla varnar för prestandaproblem med cursors. Men det är antagligen inte många så många träffar per körning så det är kanske inte något större problem i det här fallet.
Tack igen!
/Mikael Sv: Loopning av tabell och anrop av mailprocedur
WHILE currentRow <= rowCount
BEGIN
SendMail
END
Så enkelt är det, slipper man använda cursors.