Чтение из файла-помещать только новые данные в таблицу SQL
Всем привет,
У меня есть файл, в который постоянно добавляются записи. Я создаю приложение, которое 2 или 3 раза в день берет файл, читает с помощью TextFieldParser и помещает данные в SQL-таблицу.
Моя проблема заключается в следующем: в первый раз все данные вставляются в таблицу SQL. Во второй раз мне нужно, чтобы вставлялись только новые данные.
Как лучше всего это сделать?
с уважением
Что я уже пробовал:
Я создал временную таблицу для своего оригинала и попытался использовать NOT IN statment, чтобы иметь только те данные, которые не вставляются. Но, я должен использовать элемент управления на текстовой переменной, и из того, что я понимаю, не в не работает.
Tomas Takac
Вы подходите примерно правильно. Загружая данные в промежуточную таблицу, я бы использовал оператор MERGE. Но текстовое поле-это проблема. В качестве альтернативы вы можете сохранить позицию в файле, когда вы читаете его в первый раз, а затем в следующий раз прокрутите до этой позиции и просто прочитайте оттуда.
Member 10558090
В качестве альтернативы я мог бы это сделать. Возьмите последнюю запись таблицы, основанную на полях "дата" и "час", и начните чтение оттуда. Это возможно?
Tomas Takac
Не знаю, как вы собираетесь читать с дня и часа. Лучше запомните размер части, которую вы уже прочитали, а затем прокрутите до этой позиции в следующий раз. Но это постоянно растущее досье странно, если вы спросите меня. Может быть, вам стоит просто скопировать его в другое место и импортировать оттуда, а затем позволить создать новый файл в исходном месте - проблема решена.
Richard Deeming
Вы имеете в виду, что у вас есть столбец, определенный как text
введите SQL? Это устарело и будет удалено в будущей версии:
ntext, text и image (Transact-SQL)[^]
Попробуйте использовать varchar(max)
вместо.
Member 10558090
Наверное, вы правы. Это сэкономит мне много времени. Я изменил varibile в тип varchar
и используйте этот запрос: вставьте в ProvaTimbrature (Data, Ora, Codice_Tessera, Verso, Giustificativo, Tipo_Operazione, Lettore, Cognome, Nome, Causale, Matricola_Dipendente, Campo1, Campo2, Controllo) выберите Data, Ora, Codice_Tessera, Verso, Giustificativo, Tipo_Operazione, Lettore, Cognome, Nome, Causale, Matricola_Dipendente, Campo1, campo2, CONTROLLO от Tmpprovatimbrature, где Tmpprovatimbrature.Controllo NOT IN (выберите Controllo из ProvaTimbrature)
Наконец, это работает.