SSIS - Диспетчер соединений OLE DB усекает числовое значение, если получателем являются деньги - PullRequest
0 голосов
/ 05 ноября 2018

Когда я загружаю числовой столбец непосредственно в денежный столбец, компонент OLEDB усекает значение в нем, но компоненты TSQL и ADO.NET округляются, как и ожидалось.

Исходное значение: 2.081250

Vat1: карта напрямую,
Vat2: карта после конвертации в деньги тип данных

    Result:
    VAT1    VAT2    CONN 
    2.0813  2.0813  TSQL
    2.0813  2.0813  ADO
    2.0812  2.0813  OLEDB

2.0812: число -> деньги напрямую с OLEDB

У вас есть идеи? Поведение по умолчанию компонента OLEDB?

С уважением,

Мустафа

Контрольный пример:

    -- Source
    CREATE TABLE TEST_NUMERIC(VAT1 NUMERIC(38,6), VAT2 NUMERIC(38,6))
    INSERT INTO TEST_NUMERIC VALUES( 2.081250, 2.081250)

    -- Destination 
    CREATE TABLE TEST_MONEY(VAT1 MONEY, VAT2 MONEY, CONN NVARCHAR(20))

    -- Test 1 - With TSQL
    INSERT INTO TEST_MONEY
    SELECT VAT1, CAST(VAT2 AS MONEY), 'TSQL' FROM TEST_NUMERIC 


    -- Test2 - With SSIS, ADO NET and OLE DB components:
    ADO.Net Source: 
    SELECT VAT1, CAST(VAT2 AS MONEY) VAT2, N'ADO' AS CONN
    FROM TEST_NUMERIC

    Ado .Net Destination: TEST_MONEY

    **OLE DB Source:** 

    SELECT VAT1, CAST(VAT2 AS MONEY) VAT2, N'OLEDB' AS CONN
    FROM TEST_NUMERIC

    OLEDB Destination: TEST_MONEY

Пакет служб SSIS:

1 Ответ

0 голосов
/ 05 ноября 2018

Максимальный масштаб для DT_CY (тип данных SSIS для денег) равен четырем, и соединения OLE DB поддерживают этот тип данных, который по данным в вашем примере (2.081250) будет равен 2.0812. Поскольку вы выполняете приведение в SQL Server для столбца V2, оно округляется до 2,0813, прежде чем SSIS его обработает. Денежный эквивалент ADO будет десятичным (ссылка здесь ). Таким образом, хотя вы можете добавить столбец денег в пункте назначения ADO.NET и сопоставить его с числовым типом данных вашего источника, тип данных пункта назначения по-прежнему интерпретируется как десятичный, что сохраняет больший масштаб, и в этом случае округляется в большую сторону. до значения 2.0813, которое вы видите здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...