Есть ли способ условного импорта данных Excel в таблицу SQL Server?

#sql #sql-server #sql-server-2008-r2

#sql #sql-сервер #sql-server-2008-r2

Вопрос:

У меня есть электронная таблица Excel с двумя столбцами: имя и адрес электронной почты.

Мне нужно импортировать эти данные в существующую таблицу в моей базе данных SQL Server, если в таблице еще нет электронной почты.

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

 BEGIN  IF NOT EXISTS (SELECT * FROM users  WHERE email = @email)  BEGIN  INSERT INTO users (name, email)  VALUES (@name, @email)  END END  

Но используя данные импорта SQL Server, есть ли способ импортировать данные Excel, а затем выполнить этот запрос до фактического импорта каких-либо данных?

НОВЫЙ ЗАПРОС:

 INSERT INTO users (name, email) SELECT name, email FROM users_staging WHERE NOT EXIST (SELECT 1   FROM users   WHERE email = users_staging.email)  

Спасибо!

Комментарии:

1. Приведенный выше SQL подразумевает, что файл содержит только 1 строку, правильно ли это? Если это так, то, учитывая, что вы вставляете только одну строку, возможно, вам следует просто поместить a UNIQUE CONSTRAINT в столбец email . Затем INSERT произойдет сбой, если вы снова попытаетесь использовать INSERT то же значение.

2. Затем я бы предложил сначала вставить данные в промежуточную таблицу, а затем вставить их в вашу производственную таблицу (а не в процесс RBAR, как указано выше, который вы используете). Или, если вы используете слой ETL, у вас должен быть какой-то поиск, который вы можете использовать для фильтрации данных.

3. Примечание: SQL Server 2008 полностью не поддерживался более 2 лет; давно прошло время, когда вы рассматривали сортировку путей обновления. Чем дольше вы переходите на (полностью) поддерживаемую версию, тем сложнее это становится.

4. RBAR: Ряд За Мучительным Рядом. ETL: Извлечение, Преобразование, Загрузка.

5. Нет, нет, нет, не используйте WHILE … Это ужасная идея. INSERT операторы могут обрабатывать миллионы строк одновременно…