Параметр bcp.exe или BULK INSERT
не содержит параметров или фильтров, которые позволяют отфильтровывать нежелательные строки. Таким образом, вам нужно выполнить предварительную или пост-обработку.
С предварительной обработкой вы пишете инструмент на любом языке, который вам лучше всего подходит для синтаксического анализа входного файла и вывода другого файла, который может служить чистым вводом в объемную вставку.
С постобработкой вы загружаете файл, как он есть, в SQL Server (включая нежелательные строки), а затем удаляете ненужные строки из таблицы. В зависимости от ваших потребностей вы можете использовать для этого промежуточную (временную) таблицу.
Сначала создайте format file для использования с объемной вставкой. С вашего ввода, похоже, вы можете использовать формат фиксированного размера, который хорош в этом случае. Вы можете пойти в заблуждение, используйте столбец date
для столбца «END on» в вашей таблице и просто игнорируйте любые ошибки. Поскольку ни одна из других строк не содержит допустимого формата даты, вы можете использовать это как грубый фильтр. Все остальные способы, для которых вам понадобится определение таблицы, которое использует только столбцы char (n) (var).
С таким столом можно просто загрузить файл, то используйте WHERE
фильтр, чтобы удалить что-либо недопустимое при передаче данных в реальную таблицу, как это:
INSERT INTO MyRealTable
SELECT CHOC_ID, EndOn, ...
FROM #TempBulkTable
WHERE CHOC_ID NOT IN ('untime', '---------------', ...)
Или вы Коули указать FIRE_TRIGGERS
в своем объеме вставьте и дайте таблице INSTEAD OF INSERT
триггер, который выполняет фильтрацию, хотя этот вид поражает цель объемной вставки. Если вы используете временную таблицу, убедитесь, что у вас достаточно места в tempdb.
Надеюсь, это даст вам полезные идеи.
Вам нужно показать свои навыки кодирования здесь, какую помощь вы хотите от нас? – Anand
, если вы запрашиваете поток, это должно быть следующим образом: 1.get txt-файл в streamreader, 2.split string by character | 3.if string [0] = choc_id, затем взять данные из следующей строки 4. вставить и сделать. – Anand
Спасибо Ананд. У меня не было предыдущего опыта работы с SQL Stream, поэтому я надеялся, что смогу справиться с этим через встроенный скрипт или пакет SSIS. Если бы я мог получить содержимое данных в таблицах в таблицу SQL, я мог бы выполнить оставшуюся часть работы в хранимой процедуре. Я просто пытаюсь определить, как его получить, но игнорировать повторяющиеся заголовки. – user2519924