проверить, существует ли значение ячейки Excel в SQL - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть лист Excel, который содержит номера деталей для заказа.Я хочу запросить таблицу частей SQL, чтобы увидеть, существует ли каждая часть, и, если нет, отобразить «Новый» в ячейке.Я уже делаю это, импортируя столбец part_number из sql в excel, а затем использую IFERROR в VLOOKUP для отображения сообщения.

По мере того, как лист становится все больше, а все больше рабочих становятся удаленными через VPN, время, необходимое для обновления загрузки part_number, становится проблемой.

Есть ли способ использовать SQL-запрос из Excel?, используя ячейку past_number, чтобы вернуть значение, которое я могу проверить с помощью IF или чем-то еще?Нужно ли будет перебирать каждую строку в листе Excel или я могу сделать это более ориентированным на набор?

1 Ответ

0 голосов
/ 14 февраля 2019

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

  1. Перейти к вкладке Данные -> Получить данные -> Из других источников -> От Microsoft Query :

Excel, get data from Microsoft Query

Выберите Новый источник данных или выберите существующий, если ранее у вас уже был создан источник данных SQL-сервера -> нажмите ОК:

Чтобы создать новый источник данных, нажмите OK

Excel, Microsoft Query, create new SQL Server datasource

Введите имя сервера -> выберите драйвер и нажмите Connect

Excel, Microsoft Query, connect

Введите имя сервера еще раз и нажмите «Использовать доверительное соединение» или введите SQL Идентификатор входа и Пароль (в зависимости от вашей среды) -> Нажмите "Опции"

Excel, Microsoft Query, database options

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

Excel, Microsoft Query, select existing datasource

В окне Query - Выберите столбцы * В окне 1074 * выберите свою таблицу PartNumbers и столбец, в котором вы храните имя номера детали (или любое другое, которое вы используете для его идентификации в заказе): Query Wizard - Choose Columns Нажмите Далее 3 раза -> Готово (оставьте все как есть по умолчанию) -> Выберите гдепоместите результаты и нажмите OK в окне Импорт данных . Примечание: Я упоминал, что Microsoft Query не обрабатывает тип nvarchar(MAX)Что ж.В моих тестах, если у меня есть столбец с nvarchar (MAX), я вижу пустые значения для этого столбца, когда импортирую его в таблицу Excel. Перейдите на вкладку Данные -> Свойства -> Свойства соединения -> Определение вкладка.Здесь вы можете редактировать Текст команды : Microsoft Query: Change Command Text Изменить его на что-то вроде: SELECT PartNumbers.[Name] as Name FROM TestDB.dbo.PartNumbers PartNumbers WHERE PartNumbers.[Name] in (SELECT value FROM STRING_SPLIT(CAST(? as nvarchar(100)), ',')) Примечание , у нас есть вопросительный знак в запросе SQL выше - это будет ваш динамический параметр для фильтрации номеров деталей. Нажмите OK и Свойства соединения -> Определение еще раз (требуется для включения «Параметры ...» * Кнопка 1130 *) ->нажмите «Параметры ...» Microsoft Query: Parameters В окне Параметры выберите «Получить значение из следующей ячейки» и выберите ячейку, которую вы будете использовать позже, чтобы добавить динамическое значение для фильтра (пока оно может быть пустым). Вы также можете проверить Параметр «Обновлять автоматически при изменении значения ячейки» .Затем нажмите кнопку ОК во всех открытых окнах, чтобы вернуться к таблице Excel, в которой теперь не должно быть строк. Теперь перейдите к той пустой ячейке, которую вы использовали в качестве параметра, и введите следующую формулу: =TEXTJOIN(",",TRUE,[PartNumberValuesRange]).[PartNumberValuesRange] должен быть изменен на диапазон, в котором есть все номера деталей из вашего заказа. Теперь, если вы все сделали правильно, вы должны увидеть, как существующие записи номеров деталей извлекаются избазы данных к вашей таблице вы сделали в течение шагов 1-5. На данный момент вы можете использовать свой подход VLOOKUP + IFERROR для отображения соответствующего сообщения.Таблица, на которую вы ссылаетесь в формуле, будет иметь только подмножество номеров деталей, которые существуют как в порядке в вашем Excel, так и в базе данных, поэтому вы можете легко найти все номера деталей, которые отсутствуют в базе данных.Это должно ускорить ваш рабочий процесс, поскольку вам не нужно извлекать всю таблицу из базы данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...