Έχουμε τον εξής κώδικα TSQL:
----------------------------------
-- A.
DECLARE @Dtm SMALLDATETIME
SET @Dtm=GETDATE()
SET @Dtm=@Dtm-1
-- B.
DECLARE @Dtm SMALLDATETIME
SET @Dtm=GETDATE()
SET @Dtm=@Dtm+(-1)
----------------------------------
-- C.
DECLARE @Dtm DATETIME
SET @Dtm=GETDATE()
SET @Dtm=@Dtm+(-1)
-- D.
DECLARE @Dtm DATETIME
SET @Dtm=GETDATE()
SET @Dtm=@Dtm-1
----------------------------------
Στα A,C,D όλα είναι εντάξει , το Β βγάζει : Arithmetic overflow error converting expression to data type smalldatetime.
Γιατί άραγε;
Μάλλον γιαυτό:
Σε όλες τις περιπτώσεις ο δεύτερος Operator γίνεται convert στο Datatype του πρώτου.
Αναλυτικά
A.SELECT CONVERT(SMALLDATETIME,1)
C.SELECT CONVERT(DATETIME,-1)
D.SELECT CONVERT(DATETIME,1)
και B.SELECT CONVERT(SMALLDATETIME,-1) =
Arithmetic overflow error converting expression to data type smalldatetime.
έτσι για να έχουμε να ασχολούμαστε ....
Sex is like programing; One mistake, and you will have to support it for the rest of your life…