Соответствующий тип данных .Net для десятичных чисел (20,0)
-
03-07-2019 - |
Вопрос
У меня есть sql, возвращающий тип данных десятичный (20,0).В SSIS у меня есть пакет с циклом foreach.В моих сопоставлениях переменных с каким типом переменных я бы их сопоставил?Я пробовал Int32, Int64, double, но все равно получаю сообщение об ошибке: «Тип значения, присваиваемого переменной «User::iID», отличается от текущего типа переменной...»
Решение
В моем случае конструктор переменных SSIS не показывал типы данных Decimal или Numeric, в которые можно было бы поместить мое десятичное (18,2) значение.
Я изменил свою переменную на Object и смог прочитать значение Decimal(18,2) из набора результатов одной хранимой процедуры и передать его в качестве параметра с типом Money второму SP.
Поэтому я бы использовал «Объект», если вы не можете найти в списке переменных тип, который вам подходит.
Другие советы
Вы уже пробовали Decimal?
В SSIS есть десятичные и числовые типы.Вы можете использовать любой из них, и он пройдет (за исключением, может быть, Union All, где вы должны убедиться, что они имеют одинаковую точность и масштаб).
Подробнее о типах данных здесь.
В десятичной системе .NET есть методы десятичный.ToInt64(), десятичный.ToInt32() и т. д.
Я бы порекомендовал число с плавающей запятой или десятичное число.
Десятичное число SQL (20,0) имеет точность 20, что соответствует 13 байтам памяти.Десятичное число .Net составляет 16 байт и должно работать.
Вам нужно будет преобразовать тип данных SQL в Int64, прежде чем помещать его в переменную пакета Int64.
Как вы его получаете в качестве выходного параметра?
В потоке данных вы, очевидно, прочитаете его в десятичном/числовом виде, а затем преобразуете в Int64 в компоненте преобразования данных.
Если вы пытаетесь напрямую сопоставить выходной параметр из задачи «Выполнение команды SQL», вам, вероятно, придется использовать временную переменную пакета объекта, а затем преобразовать ее в задаче сценария в реальную переменную пакета Int64.