Обновить записи из файла CVS или удалить всю таблицу? - PullRequest
1 голос
/ 25 октября 2009

ну, это первый раз на этом форуме, поэтому я буду прояснять свой вопрос и спасибо заранее

Я создам программное обеспечение на C #, это приложение принимает файл CSV (около 73 000 строк). Эти файлы поступают из другой системы, также может измениться файл CSV, что это значит? CSV-файл может изменяться в одну строку (данные) или может иметь больше новых строк или может иметь меньше строк, CSV изменяется каждый час или полчаса, это зависит от ситуации !!!

Я добавляю эти строки из CSV-файла в таблицу в SQL. Первый раз легко. Я просто добавляю ADDNEW для каждой строки в CSV-файле. Но во второй раз я не могу удалить всю таблицу, чтобы импортировать ее снова с самого начала из-за этих дополнительных полей, или в другом случае, если изменяется строка в CSV, я не могу удалить все данные из таблицы.

поэтому мне нужен метод, который может автоматически проверять каждую запись в моей таблице SQL и файле CSV? Или мне нужно относиться к записям по очереди? Если бы я сравнивал каждое изменение, было бы правильно использовать курсор для этого?

Спасибо

Ответы [ 3 ]

0 голосов
/ 25 октября 2009

Если вы уже используете SSIS для прямой загрузки данных и по какой-то причине не хотите использовать промежуточную таблицу, и у вас есть какой-то ключ, который вы можете использовать для упорядочивания строк, вы можете использовать Настраиваемый компонент TableDifference . По сути, вы читаете и «старую» таблицу, и «новую» таблицу в два отдельных потока, сортируете их в одинаковом порядке и пропускаете через TableDifference. Это генерирует 3 потенциальных выхода - INSERT, UPDATE и DELETE. INSERT обычно могут быть обработаны с помощью обычной задачи вставки, но UPDATE и DELETE могут использовать отдельные вызовы команд или могут передавать в промежуточные таблицы для пакетирования операции UPDATE или DELETE.

0 голосов
/ 29 октября 2009

теперь я решил свою проблему с помощью таблицы diff ssi, теперь я работаю с этим, спасибо всем и позже

0 голосов
/ 25 октября 2009

На этот вопрос нет простого ответа; это процесс.

Во-первых, какую версию SQL Server вы используете? Если вы используете SQL Server 2008, у вас есть доступ к команде MERGE T-SQL, которая может позволить вам создать команду «upsert» (UPDATE или INSERT в зависимости от наличия данных). Если вы используете что-то более старое, кодирование становится немного более сложным, но не невозможным.

Во-вторых, когда вы загружаете свои данные, всегда сначала загружайте в промежуточную таблицу. Это позволяет вам делать сравнения на основе множеств и «отстаивать» по мере необходимости. В 99,999% случаев вы сможете делать это без курсора, и он будет работать лучше.

Stu

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