2017-04-05 120 views
-1

我有[A-NEST BY][A-CUT BY]場都是datetime領域爲什麼我得到當我運行的更新TSQL衝突:操作數類型衝突:日期是TINYINT不兼容

消息206,級別16,狀態2,過程NSTBY,9號線操作數類型 衝突:日期是TINYINT不兼容

SET [A-NEST BY] = 
    case DateAdd(day, -10, t1.[A-CUT BY]) 
     when 7 then DateAdd(day, -2, t1.[A-CUT BY]) 
     when 1 then DateAdd(day, -3, t1.[A-CUT BY]) 
     else t1.[A-CUT BY]-10 
    end, 

    FROM WORKORDERS T1 
     INNER JOIN inserted i ON T1.[WORK ORDER #] = i.[WORK ORDER #] 
     END 
+1

'情況下使用DateAdd(天,-10,T1。[A-削減])時7'沒有意義,使用DateAdd會給你一個新的日期,你如何期待它比作7? – artm

+0

@artm我用類似的邏輯和它正常工作,我用設置datestart = 7 7日在這裏 – Joe

+0

你的意思'CASE DATEPART(星期,DATEADD(DAY,-10,T1。[A-削減])).. 。?? – ZLK

回答

0

實際的邏輯,使您的查詢工作將是這樣的:

UPDATE t1 
SET [A-NEST BY] = 
    DATEADD 
    (
     DAY, 
     -CASE DATEPART(WEEKDAY, t1.[A-CUT BY]) 
      WHEN 3 -- For Tuesday, ten days prior is a Saturday, so take an extra day off. 
      THEN 11 
      WHEN 4 -- For Wednesday, ten days prior is a Sunday, so take an extra two days off. 
      THEN 12 
      ELSE 10 -- Default to ten days. 
      END, 
     t1.[A-CUT BY] 
    ) 
FROM WORKORDERS T1 
INNER JOIN inserted i ON T1.[WORK ORDER #] = i.[WORK ORDER #] 

這就是說,它看起來像你是這樣做的觸發器。

例如,如果這是您的WORKORDERS表上的插入觸發器,我會建議使用計算列而不是使用觸發器(除非[A-NEST BY]日期可以更改)。

+0

感謝@ZLK耽擱遺憾的第七日是週六的第一個日期是星期天,要是星期日或週六招至週五否則'SET [A- NEST BY] = t1。[A-CUT BY] -1'週二週六前10天,我對你的評論 – Joe

+0

@Joe有點困惑。例如2017-04-04是2017-03-25前的10天前,因此您需要休息11天而不是2017-03-24。對於2017-04-05(星期三),您需要休息12天並在2017-03-24之前完成。 – ZLK

+0

是的,但日期總是改變它並不重要? – Joe