Avatar billede Webnoob Juniormester
27. april 2017 - 20:46 Der er 8 kommentarer og
1 løsning

incompatible in the add operator

Jeg sidder og prøver at danne en mail i SQL som skal sendes med dbmail og det virker sådan set også fint nok.
Men jeg prøver at indsætte en dato som jeg gerne vil konvertere til normal visning, men støder så en i et andet problem som jeg ikke lige ved hvordan jeg løser.

Her er min sql:
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 +' har fødselsdag d. '+ CONVERT(date, @bodydata4) +' 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

og her er den fejl jeg får:
Msg 402, Level 16, State 1, Line 14
The data types varchar and date are incompatible in the add operator.


Hvordan kommer jeg lige videre?
Avatar billede acore Ekspert
27. april 2017 - 21:21 #1
Tror du ikke, der skal stå

CONVERT(VARCHAR(20), @bodydata4)

i stedet for

CONVERT(date, @bodydata4)
Avatar billede Webnoob Juniormester
28. april 2017 - 13:45 #2
Det hjælper mig ikke rigtigt, det får jeg bare denne her fejl af.
Conversion failed when converting date and/or time from character string.
Avatar billede acore Ekspert
28. april 2017 - 14:15 #3
Vi kom da videre - nu tyder alt på, at vi er på rette spor.

Ved ikke hvilket SQL, så kan ikke se i dokumentationen - måske 20 skal være noget andet - 19? Så prøv at kigge i den.
Avatar billede Webnoob Juniormester
28. april 2017 - 15:10 #4
MS sql 2016
Avatar billede acore Ekspert
28. april 2017 - 16:44 #5
Prøv - som forsøg - at erstatte CONVERT(VARCHAR(20), @bodydata4) med CONVERT(VARCHAR(20), GETDATE()).

Hvis det virker, er det indholdet af @bodydata4 den er gal med.
Avatar billede Webnoob Juniormester
28. april 2017 - 20:47 #6
Det kan jeg godt, men jeg har prøvet og sende mailen med @body = @bodydata4 og det modtager jeg en mail med en dato som ser sådan her ud 2017-04-28 og jeg vil gerne have den skal se sådan her ud 28-04-2017
Avatar billede Webnoob Juniormester
28. april 2017 - 20:51 #7
Og køre jeg den du har skrevet så får jeg denne her fejl:
Incorrect syntax near the keyword 'CONVERT'
Avatar billede Webnoob Juniormester
28. april 2017 - 21:21 #8
Hvis jeg smider et SELECT foran så bliver outputtet 1985
Altså SELECT CONVERT(varchar, 2017-04-28, 130)
og smider du 2017-04-28 igennem en lommeregner så er resultatet...... Wait for it..... 1985. Jeg er helt lost.
Prøver jeg med SELECT CONVERT(varchar, GETDATE(), 130) så er output  2 ????? 1438  9:21:
Avatar billede Webnoob Juniormester
13. maj 2017 - 22:53 #9
CONVERT(varchar(MAX), @bodydata4, 105)
Den gjorde for resten forskellen, kan ikke forklare hvorfor.
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