В SSIS у меня есть переменная с именем «Контракт», выражение которой выглядит так:
"SELECT C.CONTRACTNUM AS BL_CONTRACTNUM, C.EXTREFERENCE AS BL_EXTREFERENCE, C.REVISIONNUM AS BL_REVISIONNUM, A.BL_SERIALNUM, A.BL_DESCRIPTION, A.BL_COMPANY, A.BL_PARTNUM, CASE WHEN A.BL_WARRANTYSTARTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_WARRANTYSTARTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_WARRANTYSTARTDATE, CASE WHEN A.BL_WARRANTYENDDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_WARRANTYENDDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_WARRANTYENDDATE, C.CUSTOMER BL_CUSTOMER, A.BL_CONTRACTLINENUM, A.BL_COVERAGE, CASE WHEN A.BL_ENDOFMAINTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_ENDOFMAINTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFMAINTDATE, CASE WHEN A.BL_ENDOFSALESDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_ENDOFSALESDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFSALESDATE, CASE WHEN A.BL_ENDOFSUPPORTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char(A.BL_ENDOFSUPPORTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFSUPPORTDATE, A.BL_CINUM, NULL as CIDESCRIPTION, C.STATUS, A.BL_ISLIGHTCI, A.BL_LOCATION, CASE WHEN A.BL_CREATEDDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_CREATEDDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_CREATEDDATE, CASE WHEN A.BL_CHANGEDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_CHANGEDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_CHANGEDATE, A.BL_CHANGEBY, CASE WHEN A.BL_LOCATIONCHANGEDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_LOCATIONCHANGEDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_LOCATIONCHANGEDATEFROM MAXIMOMIS.BL_MSINV_CONTRACT CLEFT JOIN MAXIMOMIS.BL_MSINV_ALL_EQUIP A on C.CONTRACTNUM = A.BL_CONTRACTNUM AND C.REVISIONNUM = A.BL_REVISIONNUMLEFT JOIN MAXIMOMIS.BL_MSINV_MAXIMOCI CI ON CI.CINUM = a.BL_CINUM AND CI.SERIALNUMBER = a.BL_SERIALNUMWHERE C.EXTREFERENCE is not nullAND c.REVISIONNUM is not nullAND c.STATUS = 'APPR' " + (@[User::varLoadType] == "Daily" ? "AND (C.MODIFIEDDATE > (sysdate - " + @[User::varDays] + "))" : "")
Когда я оцениваю это выражение, я получаю следующее
SELECT C.CONTRACTNUM AS BL_CONTRACTNUM,C.EXTREFERENCE AS BL_EXTREFERENCE,C.REVISIONNUM AS BL_REVISIONNUM,A.BL_SERIALNUM,A.BL_DESCRIPTION,A.BL_COMPANY,A.BL_PARTNUM,CASE WHEN A.BL_WARRANTYSTARTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_WARRANTYSTARTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_WARRANTYSTARTDATE, CASE WHEN A.BL_WARRANTYENDDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_WARRANTYENDDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_WARRANTYENDDATE,C.CUSTOMER BL_CUSTOMER,A.BL_CONTRACTLINENUM, A.BL_COVERAGE,CASE WHEN A.BL_ENDOFMAINTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_ENDOFMAINTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFMAINTDATE,CASE WHEN A.BL_ENDOFSALESDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_ENDOFSALESDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFSALESDATE,CASE WHEN A.BL_ENDOFSUPPORTDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char(A.BL_ENDOFSUPPORTDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_ENDOFSUPPORTDATE,A.BL_CINUM,NULL as CIDESCRIPTION,C.STATUS,A.BL_ISLIGHTCI, A.BL_LOCATION,CASE WHEN A.BL_CREATEDDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_CREATEDDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_CREATEDDATE,CASE WHEN A.BL_CHANGEDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_CHANGEDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_CHANGEDATE,A.BL_CHANGEBY,CASE WHEN A.BL_LOCATIONCHANGEDATE < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL ELSE to_char( A.BL_LOCATIONCHANGEDATE, 'YYYY-MM-DD HH24:MI:SS') END AS BL_LOCATIONCHANGEDATEFROM MAXIMOMIS.BL_MSINV_CONTRACT CLEFT JOIN MAXIMOMIS.BL_MSINV_ALL_EQUIP A on C.CONTRACTNUM = A.BL_CONTRACTNUM AND C.REVISIONNUM = A.BL_REVISIONNUM LEFT JOIN MAXIMOMIS.BL_MSINV_MAXIMOCI CI ON CI.CINUM = a.BL_CINUM AND CI.SERIALNUMBER = a.BL_SERIALNUM WHERE C.EXTREFERENCE is not null AND c.REVISIONNUM is not null AND c.STATUS = 'APPR' AND (C.MODIFIEDDATE > (sysdate - 7))
Когда я запускаю этот запрос в Oracle sql / developer tool. Я получаю 18 строк.
Но когда переменная «Контракт» используется в задаче выполнения sql во время выполнения, она выдает 3775 строк. Я установил точку останова и убедился, что запрос оценивается в то же значение (в окне просмотра во время отладки), что и выше, и делает.
Так что меня не смущает, почему он не будет генерировать 18 строк, а будет производить 3775 строк во время выполнения?
Что еще более запутанно, так это то, что у меня есть другие переменные с точно таким же выражением, за исключением того, что select и соединения различаются, и все они работают нормально.
Я даже проверил xml-код пакета dtsx * Значение 1015 * отображается правильно. Я не уверен, что мне здесь не хватает, может кто-нибудь указать, если что-то не так?