Оператор 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))