Как SQL усекает данные при вставке? - PullRequest
1 голос
/ 24 сентября 2019

Я работаю над пакетом служб SSIS, который выполняет множество задач, одним из которых является копирование данных из таблицы в одной базе данных в таблицу в другой базе данных.На одном из моих компонентов пакета я получаю предупреждения об усечении, потому что исходная таблица имеет ColumnA NCHAR(10), в то время как таблица назначения имеет ColumnA NCHAR(1).ColumnA в исходной таблице имеет только значения длиной 1 символ, поэтому теоретически я могу игнорировать получаемые предупреждения об усечении, так как исходные данные в любом случае имеют длину только 1 символ.

Правильно ли я этоЯ могу игнорировать эти предупреждения?Как именно SQL усекает данные в этих случаях?Если в исходном столбце содержится только один символ, содержащий 10 символов, будет ли этот символ всегда копироваться в место назначения или существует вероятность того, что даже этот один символ не будет скопирован?

1 Ответ

0 голосов
/ 24 сентября 2019

SSIS всегда обрезает последние символы.Таким образом, если вы обрабатываете 9-символьную строку, например «123456789», и вставляете ее в столбец с столбцом из 5 символов, SSIS обрежет последние 4 символа, преобразуя строку в «12345».Если вы вставляете в столбец длиной 1 символ, службы SSIS обрезаются до «1».

Если вы уверены, что никогда не получите строку длиной более 1 символа из источника, который потенциально можетудерживайте десять символов, не стесняйтесь игнорировать предупреждение.Это, конечно, в теории.На практике вам лучше было бы написать оператор SELECT или аналогичный для вашего источника OLE DB, например:

CASE WHEN LEN(ColumnA) <> 1
THEN 'e' --e for error; destination column length is 1
ELSE ColumnA
END AS ColumnA

, для обработки такой ошибки.

Если у вас есть источник API или другой источник, отличный от OLE DB, вы можете использовать производный столбец SSIS для аналогичного эффекта.

...