найди количество значений null в поле weight таблицы products

Функция ISNULL (Transact-SQL)

Заменяет значение NULL указанным замещающим значением.

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы productsСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

check_expression
Выражение, которое необходимо проверить на равенство значению NULL. Аргумент check_expression может быть любого типа.

replacement_value
Выражение, возвращаемое, если check_expression имеет значение NULL. Аргумент replacement_value должен иметь тип, который может быть неявно преобразован в тип check_expression.

Типы возвращаемых данных

Возвращает тип, совпадающий с типом выражения check_expression. Если в аргументе check_expression предоставлено литеральное значение NULL, возвращает тип данных replacement_value. Если в аргументе check_expression предоставлено литеральное значение NULL, а аргумент replacement_value не задан, возвращает int.

Remarks

Возвращается значение check_expression, если это выражение не равно NULL. В противном случае возвращается значение replacement_value. Если типы являются разными, то тип replacement_value неявно преобразуется в тип check_expression. Значение replacement_value может усекаться, если значение replacement_value длиннее, чем check_expression.

Для возврата первого значения, отличного от NULL, используйте функцию COALESCE (Transact-SQL).

Примеры

A. Использование функции ISNULL с функцией AVG

Б. Использование функции ISNULL

DescriptionDiscountPctMinQtyМаксимальное количество
Без скидки0,0000
Оптовая скидка0,021114
Оптовая скидка0,05154
Оптовая скидка0,10250
Оптовая скидка0,15410
Оптовая скидка0,20610
Mountain-100 Cl0,3500
Sport Helmet Di0,1000
Road-650 Overst0,3000
Mountain Tire S0,5000
Sport Helmet Di0,1500
LL Road Frame S0,3500
Touring-3000 Pr0,1500
Touring-1000 Pr0,2000
Half-Price Peda0,5000
Mountain-500 Si0,4000

В. Проверка значений NULL в предложении WHERE

Не используйте для поиска значений NULL выражение ISNULL, вместо него следует использовать выражение IS NULL. В следующем примере выполняется поиск всех продуктов, имеющих значение NULL в столбце веса. Заметьте, что между словами IS и NULL стоит пробел.

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

Г. Использование функции ISNULL с функцией AVG

Д. Использование функции ISNULL

В приведенном ниже примере функция ISNULL используется для поиска значений NULL в столбце MinPaymentAmount и отображения значения 0.00 для соответствующих строк.

Здесь приводится частичный результирующий набор.

ResellerNameMinimumPayment
A Bicycle Association0,0000
A Bike Store0,0000
A Cycle Shop0,0000
A Great Bicycle Company0,0000
A Typical Bike Shop200,0000
Acceptable Sales & Service0,0000

Е. Использование функции IS NULL для проверки на значение NULL в предложении WHERE

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

SQL условие IS NOT NULL

В этом учебном материале вы узнаете, как использовать SQL условие IS NOT NULL с синтаксисом и примерами.

Описание

Условие IS NOT NULL используется в SQL для проверки значения, отличного от NULL. Оно возвращает TRUE, если найдено ненулевое значение, в противном случае оно возвращает FALSE. Его можно использовать в операторе SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис для условия IS NOT NULL в SQL:

Параметры или аргументы

При проверке значения, отличного от NULL, IS NOT NULL является рекомендуемым оператором сравнения для использования в SQL. Давайте начнем с примера, который показывает, как использовать условие IS NOT NULL в SELECT предложении.

В этом примере у нас есть таблица products со следующими данными:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25
7KleenexNULL

Введите следующий SQL оператор:

Будет выбрано 6 записей. Вот результаты, которые вы должны получить:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25

Далее давайте рассмотрим пример использования условия IS NOT NULL в запросе UPDATE.

В этом примере у нас есть таблица customer со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

Введите следующий запрос UPDATE:

Будет обновлено 5 записей. Выберите данные из таблицы customer еще раз:

Вот результаты, которые вы должны получить:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezgoogle.com
6000MilaKunisgoogle.com
7000TomCruisegoogle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

В этом примере будут обновлены все значения fav_website в таблице customer до google.com, где favourite_website содержит значение NULL. Как вы видите, значения поля favorite_website обновлены все строки кроме одной.

Далее давайте рассмотрим пример использования условия IS NULL в запросе DELETE.

В этом примере у нас есть таблица orders и следующими данными:

Источник

SQL Функции NULL

SQL Функции IFNULL(), ISNULL(), COALESCE(), и NVL()

Посмотрите на следующую таблицу «Products»:

P_IdProductNameUnitPriceUnitsInStockUnitsOnOrder
1Jarlsberg10.451615
2Mascarpone32.5623
3Gorgonzola15.67920

Предположим, что столбец «UnitsOnOrder» является необязательным и может содержать нулевые значения.

Посмотрите на следующую инструкцию SELECT:

В приведенном выше примере, если какое-либо из значений «UnitsOnOrder» равно NULL, результат будет равен нулю.

Решения

MySQL функция IFNULL() позволяет возвращать альтернативное значение, если выражение равно нулю:

или мы можем использовать функцию COALESCE(), например:

SQL Server функция ISNULL() позволяет возвращать альтернативное значение, если выражение равно нулю:

MS Access функция IsNull() возвращает TRUE (-1), если выражение имеет нулевое значение, в противном случае FALSE (0):

Oracle функция NVL() достигает того же результата:

Упражнения

Тесты

КАК СДЕЛАТЬ

ПОДЕЛИТЬСЯ

СЕРТИФИКАТЫ

Сообщить об ошибке

Если вы хотите сообщить об ошибке или сделать предложение, не стесняйтесь, присылайте нам электронное письмо:

Ваше предложение:

Спасибо, за вашу помощь!

Ваше сообщение было отправлено в SchoolsW3.

Топ Учебники

Топ Справочники

Топ Примеры

Веб Сертификаты

Источник

SQL Server Integration Services (SSIS) для начинающих – часть 3

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В этой части я расскажу о работе с параметрами и переменными внутри SSIS-пакета. Узнаем, как можно задавать и отслеживать значения переменных во время выполнения пакета.

Также рассмотрим вызов одного пакета из другого при помощи «Execute Package Task» и некоторые дополнительные компоненты и решения.

Здесь тоже будет много картинок.

Продолжим знакомство с SSIS

Создадим в трех демонстрационных базах новую таблицу ProductResidues, которая будет содержать информацию об остатках на каждый день:

И наполним таблицы в источниках тестовыми данными, поочередно выполнив на базах DemoSSIS_SourceA и DemoSSIS_SourceB следующий скрипт:

Допустим, что в таблице ProductResidues будет очень много строк, и чтобы каждый раз не перезагружать всю информацию и упростить процедуру интеграции, логику загрузки в таблицу ProductResidues в базе DemoSSIS_Target реализуем следующую:

В нашем же случае еще допустим, что пользователи могут менять данные задним числом и могут вообще удалить некоторые ранее загруженные в базу DemoSSIS_Target строки из источников. Поэтому здесь обновление делается как-бы внахлёст, данные последней недели полностью перезаписываются. Здесь неделя берется условно, об этом минимальном сроке, например, мы могли бы условиться с заказчиком (он мог подтвердить, что данные обычно меняются максимум в течении недели). Конечно это не самый надежный способ, и иногда могут возникнуть расхождения, например, в том случае, когда пользователь поменял данные месячной давности и здесь стоит предусмотреть возможность перезагрузки данных начиная с более ранней даты, мы сделаем это при помощи параметра, в котором будем указывать нужное нам количество дней назад.

Создадим новый SSIS-пакет и назовем его «LoadResidues.dtsx».

При помощи контекстного меню, отобразим область ввода переменных пакета (это можно сделать также при помощи меню «SSIS → Variables»):

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В данном пакете, нажав на кнопку «Add Variable», создадим переменную LoadFromDate типа DateTime:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

По умолчанию переменной присваивается текущее значение даты/времени, т.к. мы будем переопределять значение внутри пакета, нам это не важно.

Так же стоит обратить внимание на Expression – если прописать в этом поле выражение, то переменная будет работать как формула и мы не сможем изменять ее значение при помощи присваивания. При каждом обращении к такой переменной ее значение будет рассчитываться согласно указанному выражению.

Значения переменных можно задавать при помощи компонента «Expression Task». Давайте рассмотрим, как это делается. Создадим элемент «Expression Task»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Двойным щелчком откроем редактор данного элемента:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Пропишем следующее выражение:

Здесь так же была применена двойная конвертация типа, чтобы избавиться от составляющей времени и оставить только дату.

Давайте так же посмотрим как можно отследить значение переменной во время выполнения пакета.

Создадим точку останова на элементе «Expression Task»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Укажем, что точка должна срабатывать по окончанию выполнения данного блока:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Запустим пакет на выполнение (F5) и после остановке в нашей точке, перейдем на вкладку «Locals»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Раскроем список Variables и найдем в нем свою переменную:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Для интереса можем поменять выражение элементе «Expression Task» на следующее:

и также поэкспериментировать:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Точку останова убирается таким же образом каким и была установлена. Либо можно удалить сразу все точки останова, если их было несколько:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Создадим параметр, который будет отвечать за количество дней назад.

Параметр можно создать, как глобальный для всего проекта:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Так и локальный, внутри конкретного пакета:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Параметр может быть обязательный для задания – за это отвечает флаг Required. Если этот флаг установлен, то при создании задачи или при вызове пакета из другого пакета нужно будет определить входящее значение параметра (мы рассмотрим это далее).

В отличие от переменных значение параметров при помощи «Expression Task» менять нельзя.

Сохраним параметры и снова зайдем в редактор «Expression Task»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Для примера я поменял выражение на следующее:

Думаю, на этом суть параметров и переменных ясна, и мы можем продолжить.

После того как мы поигрались с «Expression Task» мы его удалим.

Создадим «Execute SQL Task»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим его следующим образом:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Пропишем в SQLStatement следующий запрос:

Т.к. данный запрос возвращает одну строку, установим ResultSet = «Single Row» и ниже на вкладке «Result Set» сохраним результат в значение переменной LoadFromDate.

На вкладке «Parameter Mapping» зададим значения параметров, которые в запросе обозначены знаком вопроса (?):

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Параметры нумеруются, начиная с нуля.

Стоит отметить, что если при создании соединения воспользоваться другим видом провайдера, например, «ADO» или «ADO.Net», то вместо вопросов мы сможем использовать именованные параметры типа @ParamName и в качестве «Parameter Name» тоже могли бы указывать @ParamName, а не его номер. Но увы типом соединения с другим провайдером мы сможем воспользоваться не во всех случаях.

Теперь на вкладке «Result Set» укажем в какую переменную нужно записать результат выполнения запроса:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Здесь так же можем продебажить установив у этого компонента точку останова на «Break when the container receives the OnPostExecute event» и запустив пакет на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Здесь я для удобства мониторинга значения переменной прописал название переменной в «Watch», чтобы не искать ее в блоке «Locals».

Как видим все верно в переменную LoadFromDate записалась дата «01.01.1900», т.к. строк в таблице ProductResidues на Target еще нет.

Переименую для наглядности «Execute SQL Task» в «Set LoadFromDate».

Создадим еще один элемент «Execute SQL Task» и назовем его «Delete Old Rows»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим его следующим образом:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

SQLStatement содержит следующий запрос:

И зададим значение параметра на вкладке «Parameters Mapping»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Все, удаление старых данных за указанный конечный период у нас реализовано.

Теперь сделаем часть отвечающую загрузку свежих данных. Для этого воспользуемся компонентом «Data Flow Task»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Зайдем в область данного компонента и создадим «Source Assistant»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим его следующим образом:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Нажав на кнопку «Parameters…» зададим значение параметра:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Для записи новых данных воспользуемся уже знакомым компонентом «Destination Assistant»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Протянем стрелку от «Source Assistant» и настроим его:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Все, пакет для переноса данных с источника SourceA у нас готов, можем запустить его на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Как видим при повторном запуске удалились и залились только данные за указанный период. Ну вроде все работает так как мы и хотели. На всякий случай сверимся, что данные получателя по количеству равны данным источника:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Дойдя до сюда, я понял, что я допустил ошибку. Кто понял в чем дело, молодец!

Но может это и хорошо, т.к. пример получился не таким перегруженным.

Ошибка в том, что я забыл учесть, что при интеграции данных таблицы Products у нас в Target формируются свои идентификаторы (поле ID с флагом IDENTITY)!

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

Забежим чуть вперед и добавим в пакет еще один параметр, который назовем «SourceID»:
найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Перенастроим «Set LoadFromDate»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В SQLStatement пропишем новый запрос с учетом SourceID:

Настроим второй параметр:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь перенастроим «Delete Old Rows» аналогичным образом, чтобы учитывался SourceID:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В SQLStatement пропишем новый запрос с учетов SourceID:

Настроим второй параметр:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь зайдем в «Data Flow Task», удалим цепочку и добавим «Derived Column»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим его следующим образом:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Здесь я намеренно оставил тип «Unicode string», а не сделал преобразование как в первой части. Давайте за одно рассмотрим компонент «Data Conversion»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь при помощи Lookup сделаем сопоставление и получим нужные нам идентификаторы продуктов:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь протянем синюю стрелку от Lookup к «OLE DB Destination»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Выберем поток «Lookup Match Output»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим «OLE DB Destination», нужно перестроить Mappings:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Все, сделаем очистку таблицы от неправильно загруженных данных:

И запустим пакет на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Похоже на правду. Можете самостоятельно проверить правильно ли разнеслись идентификаторы продуктов.

Так как структура DemoSSIS_SourceA и DemoSSIS_SourceB одинакова и нам нужно сделать для DemoSSIS_SourceB, то же самое, то мы можем при создании задачи создать два шага для пакета «LoadResidues.dtsx», в первом шаге настроить подключение к базе DemoSSIS_SourceA, а на втором шаге DemoSSIS_SourceB.

Откомпилируем и передеплоим SSIS проект:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Давайте теперь создадим новое задание в SQL Agent:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

На вкладке Steps создадим шаг 1 для загрузки продуктов:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Создадим шаг 2 для загрузки остатков из SourceA:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

На вкладке Configuration можем увидеть наши параметры:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Здесь от нас требуют ввести SourceID, т.к. мы указали его как Required. Зададим его:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Данные вкладки «Connection Managers» изменять для этого шаге не будем.

Создадим шаг 3 для загрузки остатков из SourceB:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Зададим параметр SourceID:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

И изменим данные соединения SourceA таким образом, чтобы оно ссылалось на базу DemoSSIS_SourceB:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В данном случае мне достаточно было изменить ConnectionString и InitialCatalog, теперь они указывают на DemoSSIS_SourceB.

В итоге мы должны получить следующее – три шага:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Запустим эту задачу на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

И убедимся, что все отработало как надо:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь допустим, что базы DemoSSIS_SourceA и DemoSSIS_SourceB расположены на одном экземпляре SQL Server. Давайте переделаем «OLE DB Source»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь наш пакет в зависимости от значения параметра SourceID будет брать данные либо из SourceA, либо из SourceB.

Для теста можете изменить значение параметра SourceB на «B» и запустить проект на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Давайте теперь создадим новый пакет «LoadAll.dtsx» и создадим в нем «Execute Package Task» (переименуем его в «Load Products»):

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим «Load Products»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Создадим в новом пакете 2 параметра:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В области «Control Flow» создадим еще 2 компонента «Execute Package Task» которые назовем «Load Resudues A» и «Load Resudues B»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Настроим их задав у обоих название пакета «LoadResidues.dtsx»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Зададим обязательный параметр SourceID для «Load Resudues A»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Зададим обязательный параметр SourceID для «Load Resudues B»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Обратите внимание, что у стрелок тоже есть свои свойства, например, мы можем поменять свойство Value на Completion, что будет означать, что следующий шаг будет выполнен даже в том случае если на шаге «Load Resudues A» произойдет ошибка:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Все, можем запустить пакет на выполнение:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Думаю, объяснять, что здесь произошло нет смысла.

Иногда параметры для конкретного пакета удобно хранить в вспомогательной таблице и считывать их оттуда в переменные пакета, например, используя для поиска глобальную переменную «System::PackageName». Для демонстрации, давайте переделаем наш пакет таким образом.

Создадим таблицу с параметрами:

Удалим параметр DateOffset из пакета «LoadResidues.dtsx»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Создадим в пакете переменную DateOffset:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

В область «Control Flow» добавим еще один элемент «Execute SQL Task» и переименуем его «Load Params»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Запрос в SQLStatement пропишем следующий:

Настроим параметр запроса используя системную переменную «System::PackageName»:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Осталось сбросить результат выполнения запроса в переменную:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Теперь осталось перенастроить «Set LoadFromDate», чтобы в нем использовалась теперь переменная:

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

найди количество значений null в поле weight таблицы products. Смотреть фото найди количество значений null в поле weight таблицы products. Смотреть картинку найди количество значений null в поле weight таблицы products. Картинка про найди количество значений null в поле weight таблицы products. Фото найди количество значений null в поле weight таблицы products

Все, можем тестировать новую версию пакета.

Вот мы и добрались до финиша. Мои поздравления!

Заключение по третьей части

Уважаемые читатели, эта часть будет заключительной.

В данном цикле статей, я постарался продумать примеры таким образом, чтобы сделать их как можно короче и в свою очередь охватить как можно больше полезных и важных деталей.

Думаю, освоив это, далее вы уже без особого труда сможете освоить работу с остальными компонентами SSIS. В данных статьях я рассмотрел только самые важные компоненты (наиболее часто применяемые на моей практике), но зная только это вы уже можно сделать очень многое. По мере надобности изучайте самостоятельно другие компоненты, в первую очередь порекомендовал бы посмотреть следующее:

Я не старался сделать подробный учебник (думаю, все это уже есть), а старался сделать такой материал, который позволит начинающим шаг за шагом создать все с самого нуля и делая все своими руками увидеть всю картину в целом, а после уже имея основу идти дальше самостоятельно. Очень надеюсь, что у меня это получилось и материал окажется полезен именно в таком ключе.

Я очень рад, что мне хватило сил осуществить задуманное и описать все так как я это хотел, даже получилось сделать большее, так как из-за допущенной в этой части ошибки возникли неожиданные повороты сюжета, но так я думаю, стало даже интересней. 😉

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *