Avatar billede Webnoob Juniormester
25. april 2017 - 20:58 Der er 5 kommentarer og
1 løsning

hvis dato er ude i fremtiden så... ellers

Jeg har følgende sql hvor jeg prøver at få dbmail til at sende en mail hvos der findes en dato 7 dage ude i fremtiden i en table.
Men det lykkes ikke rigtig for mig.

Hvad gør jeg galt?

DECLARE @modtager varchar(MAX)
DECLARE @hfodselsdag date

SET @modtager = (SELECT Email FROM [test].[dbo].[Medlemmer] WHERE Rolle = 'Formand')
SET @hfodselsdag = (SELECT fodselsdag FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+7) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))

IF (@hfodselsdag > GETDATE())
    PRINT GETDATE()
--    ELSE
--    PRINT @hfodselsdag
--        EXEC msdb.dbo.sp_send_dbmail
--            @profile_name = 'DBMail',
--            @recipients = @modtager,
--            @query = 'SELECT [nFornavn], [nMellemnavn], [nEfternavn] FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+13) AND MONTH([Fodselsdag]) = MONTH(GETDATE())',
--            @subject = 'Fødselar',
--            @Body = 'test'
    ELSE
        PRINT GETDATE()
    GO
Avatar billede Webnoob Juniormester
25. april 2017 - 21:26 #1
Fik løst det sådan her i stedet for.


DECLARE @modtager varchar(MAX)
DECLARE @hfodselsdag date

SET @modtager = (SELECT Email FROM [Test].[dbo].[Medlemmer] WHERE Rolle = 'Formand')

IF EXISTS (SELECT fodselsdag FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DBMail',
        @recipients = @modtager,
        @query = 'SELECT nFornavn FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE())',
        @subject = 'Fødselar',
        @Body = 'Test'
ELSE
    PRINT GETDATE()
GO
Avatar billede Syska Mester
25. april 2017 - 21:49 #2
Avatar billede Webnoob Juniormester
26. april 2017 - 07:12 #3
Jeg kan ikke lige se fordelen ved at bruge den, jeg skal jo bare  se om der er en dato i rækken som i morgen.
Avatar billede Syska Mester
29. april 2017 - 01:38 #4
Performance og læsevenlighed ...

Jeg bruger 1 metode, du bruger 3 ... eller burde, da du har glemt at sammenligne på "år" ...
Avatar billede Webnoob Juniormester
09. maj 2017 - 20:07 #5
Syska jeg tager gerne i mod forslag til forbedringer. Jeg er overhoved ikke nogen haj til det her SQL. Jeg er dog godt klar over at min kode har mange linje som sikkert kan samskrives til en, men lige nu koncentrere jeg mig om at få det til at virke, som må det andet komme i anden række.

OG nu har jeg brug for hjælp.

Nedenstående er den kode jeg har lavet, men jeg kan ikke få den til at virke.
Prøver jeg og køre den så får jeg følgende fejl.
Msg 402, Level 16, State 1, Line 13
The data types nvarchar(max) and date are incompatible in the add operator.


DECLARE @modtager varchar(MAX)
DECLARE @bodydata1 varchar(MAX)
DECLARE @bodydata2 varchar(MAX)
DECLARE @bodydata3 varchar(MAX)
DECLARE @bodydata4 date
DECLARE @BodyText varchar(MAX)

SET @modtager = (SELECT Email FROM [Test].[dbo].[Medlemmer] WHERE Rolle = 'Formand')
SET @bodydata1 = (SELECT nFornavn FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
SET @bodydata2 = (SELECT nMellemnavn FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
SET @bodydata3 = (SELECT nEfternavn FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
SET @bodydata4 = (SELECT fodselsdag FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
--SET @BodyText = + @bodydata1 +' '+ @bodydata2 +' '+ @bodydata3 +N' har fødselsdag d. '+ CONVERT(date, @bodydata4) +' han bliver [N]år.' + CHAR(13)+CHAR(10) + N'Send John en hilsen.'
SET @BodyText = + @bodydata1 +' '+ @bodydata2 +' '+ @bodydata3 +N' har fødselsdag d. han bliver [N]år.' + CHAR(13)+CHAR(10) + N'Send John en hilsen.'

IF EXISTS (SELECT fodselsdag FROM [Test].[dbo].[Medlemmer] WHERE DAY([Fodselsdag]) = DAY(GETDATE()+1) AND MONTH([Fodselsdag]) = MONTH(GETDATE()))
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DBMail',
        @body_format = 'TEXT',
        @recipients = @modtager,
        @subject = N'Fødselar',
        @Body = @BodyText
ELSE
    PRINT GETDATE()
GO
Avatar billede Webnoob Juniormester
09. maj 2017 - 20:14 #6
Det er så blevet løst, havde skrevet forkert i convert, det er rettet til varchar(MAX) fra date, men det bliver vist som yyyy-mm-dd og jeg vil gerne vise det som dd-mm-yyyy, hvordan gør jeg det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester