datediff в регистре T-SQL выдает ошибку переполнения во время выполнения - PullRequest
0 голосов
/ 21 февраля 2019

Оператор SELECT, приведенный ниже, взят из хранимой процедуры, которая прекрасно работает без двух столбцов сравнения дат, AFIOTD и CustomerOTD.(Они предназначены для возврата 1, если [startdate] <= [enddate], иначе 0.) Когда я включаю столбцы, мой код вызова выдает ошибку переполнения.

Вызов из MS Access 2016 VBAи этот SP работает на MS SQL 2016.

Хранимая процедура заполняет набор записей DAO.

SELECT COL.COMMODITY_CODE, Rec.INVOICE_ID, Rec.INVOICE_DATE, Rec.CUSTOMER_ID, Cust.NAME, Cust.ADDR_1, Cust.CITY, Cust.STATE, COL.PART_ID, Bustout.PART_NUMBER, 
               Bustout.AUX, Rec_Line.AMOUNT, ShipLine.SHIPPED_QTY, Shipper.PACKLIST_ID, COL.PROMISE_DATE, COL.DESIRED_SHIP_DATE, 
                CASE
                    WHEN DATEDIFF(day, CAST(Rec.INVOICE_ID AS datetime), CAST(COL.PROMISE_DATE AS datetime)) >= 0
                        THEN CAST(1 AS int)
                        ELSE CAST(0 AS int) 
                END AS AFIOTD, 
                CASE
                    WHEN DATEDIFF(day, CAST(Rec.INVOICE_ID AS datetime), CAST(COL.DESIRED_SHIP_DATE AS datetime)) >= 0
                        THEN CAST(1 AS int)
                        ELSE CAST(0 AS int) 
                END AS CustomerOTD
        FROM   dbo.AFI_PARTS_BUSTOUT AS Bustout RIGHT OUTER JOIN
              AFIRALSRV06.AFI.dbo.SHIPPER_LINE AS ShipLine RIGHT OUTER JOIN
              AFIRALSRV06.AFI.dbo.SHIPPER AS Shipper ON ShipLine.PACKLIST_ID = Shipper.PACKLIST_ID RIGHT OUTER JOIN
              AFIRALSRV06.AFI.dbo.RECEIVABLE_LINE AS Rec_Line ON Shipper.INVOICE_ID = Rec_Line.INVOICE_ID AND Shipper.PACKLIST_ID = Rec_Line.PACKLIST_ID LEFT OUTER JOIN
              AFIRALSRV06.AFI.dbo.CUST_ORDER_LINE AS COL ON Rec_Line.CUST_ORDER_ID = COL.CUST_ORDER_ID AND Rec_Line.CUST_ORDER_LINE_NO = COL.LINE_NO ON 
              Bustout.PART_NUMBER = COL.PART_ID RIGHT OUTER JOIN
              AFIRALSRV06.AFI.dbo.RECEIVABLE AS Rec INNER JOIN
              AFIRALSRV06.AFI.dbo.CUSTOMER AS Cust ON Rec.CUSTOMER_ID = Cust.ID ON Rec_Line.INVOICE_ID = Rec.INVOICE_ID
        WHERE  (Rec.INVOICE_DATE >= CONVERT(DATETIME, @InvoiceDateStart, 102) AND Rec.INVOICE_DATE <= CONVERT(DATETIME, @InvoiceDateEnd, 102))
                 AND (NOT (Shipper.PACKLIST_ID IS NULL))
...