#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
в столбецINSERT
произойдет сбой, если вы снова попытаетесь использоватьINSERT
то же значение.2. Затем я бы предложил сначала вставить данные в промежуточную таблицу, а затем вставить их в вашу производственную таблицу (а не в процесс RBAR, как указано выше, который вы используете). Или, если вы используете слой ETL, у вас должен быть какой-то поиск, который вы можете использовать для фильтрации данных.
3. Примечание: SQL Server 2008 полностью не поддерживался более 2 лет; давно прошло время, когда вы рассматривали сортировку путей обновления. Чем дольше вы переходите на (полностью) поддерживаемую версию, тем сложнее это становится.
4. RBAR: Ряд За Мучительным Рядом. ETL: Извлечение, Преобразование, Загрузка.
5. Нет, нет, нет, не используйте
WHILE
… Это ужасная идея.INSERT
операторы могут обрабатывать миллионы строк одновременно…