2013-12-18 5 views
0

У нас есть лист Excel, который будет содержать 18 000 идентификаторов. У нас есть таблица Master в нашей базе данных, где эти идентификаторы находятся на листе excel.Массовая проверка в SQL Server 2008 r2

Поскольку это расширенный лист, измененный многими пользователями, мы хотим проверить эти идентификаторы 18 000 и убедиться, что это допустимый идентификатор в базе данных. Но мы не хотим вызывать процедуру, передавая один идентификатор одновременно и проверяя идентификатор. Таким образом, мы должны сделать 18 000 вызовов БД для проверки всех 18 000 идентификаторов, чтобы мы этого не сделали.

Есть ли какой-либо другой способ, способный достичь этого?

Я пробовал это: Передал все 18 000 идентификаторов в качестве параметра, оценивающего таблицу, в процедуру. Используется концепция слияния SQL. Целевая таблица: мастер-таблица со всеми идентификаторами. Таблица источников: параметр, оцененный по таблице. Условие: ON TargetTable.id = SourceTable.id WHEN NOT MATCHED THEN - Здесь я не хочу обновлять, удалять или вставлять INSERT в мою целевую таблицу, потому что это наша главная таблица, поэтому мы не хотим, чтобы какие-либо инструкции DML аганист та таблица. Но SQL Merge не позволяет мне работать с другими таблицами. Так что это не работает для меня.

+0

первого принести все свои данные в SQL сервера в таблице спекуляции затем отфильтровать ненужные строки пути (присоединений/слияния) все, что вам подходит, а затем выполните операции со всеми отфильтрованными строками. –

ответ

1

Самый быстрый способ сделать это - массовый импорт в временную таблицу, а затем присоединиться к этой таблице с помощью идентификатора в excel и ID вашей справочной таблицы. Все присоединенные будут действительными и не будут связаны с недействительными.

годных

SELECT * FROM ExcelDump inner join ReferenceTable on ExcelDump.Id = ReferenceTable.Id 

недопустимый

SELECT * FROM ExcelDump inner join ReferenceTable on ExcelDump.Id <> ReferenceTable.Id