Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ssis: как заранее отвалидировать входной файл  [new]
pr--------
Guest
подскажите плиз как решить такую проблему:
имеется ssis-пакет, где (упрощенно) имеются пары:
ExecuteSQL Task -> Dataflow Task.
в ExecuteSQL Task делается truncate table, в Dataflow Task подгружаются данные из Excel.
файлы Excel стали поступать с заголовками столбцов как бог на душу положит,
т.е. все работало, а теперь вылазят ошибки о несуществующих/новых столбцах
только потому что заголовки не соответствуют.
эксели ручками поправляются, ок, но нехорошо, что сперва затираются прежние данные: truncate table
как переделать пакет, чтобы в случае несоответствующих заголовков не делался truncate?
16 ноя 12, 13:18    [13483409]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
qwerty112
Guest
pr--------,

ну первое же, что на ум приходит
- перед ExecuteSQL Task, - выполнить скрипт таск, который пройдёт по заголовкам столбцов и проверит их,
и - или вылетит с ошибкой (err.Raise), или "поисправляет" касяки ...

не вариант ?
16 ноя 12, 13:37    [13483575]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
trucate
Guest
pr--------
подскажите плиз как решить такую проблему:
имеется ssis-пакет, где (упрощенно) имеются пары:
ExecuteSQL Task -> Dataflow Task.
в ExecuteSQL Task делается truncate table, в Dataflow Task подгружаются данные из Excel.
файлы Excel стали поступать с заголовками столбцов как бог на душу положит,
т.е. все работало, а теперь вылазят ошибки о несуществующих/новых столбцах
только потому что заголовки не соответствуют.
эксели ручками поправляются, ок, но нехорошо, что сперва затираются прежние данные: truncate table
как переделать пакет, чтобы в случае несоответствующих заголовков не делался truncate?

заливайте данные в промежуточные таблицы
16 ноя 12, 13:38    [13483584]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
а почему сначала не сделать загрузку во временную талицу и в случае успеха проделать очистку и перегрузку в основную
16 ноя 12, 13:40    [13483603]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
pr--------
Guest
спасибо. сейчас попробую со временными таблицами,
только сомневаюсь, что все таски в одном коннекте.
вот сделаю #t, а соседний таск возьмет и не увидит #t?
(не хотелось бы создавать "временно-постоянные" таблицы)
а поясните, как сделать
"выполнить скрипт таск, который пройдёт по заголовкам столбцов и проверит их,
и - или вылетит с ошибкой (err.Raise)"?
т.е. как мне обращаться к столбцам экселя, срипт же sql-серверный?
16 ноя 12, 14:07    [13483934]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
truncate table
Guest
pr--------
не хотелось бы создавать "временно-постоянные" таблицы

религия запрещает?
16 ноя 12, 14:09    [13483948]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
truncate table
Guest
truncate table
pr--------
не хотелось бы создавать "временно-постоянные" таблицы

религия запрещает?



создайте постоянные промежуточные таблицы для заливки данных из excel.

шаг 1
почистили промежуточные таблицы
шаг 2
залили в них данные
шаг 3
в одной транзакции почистили данные в основных таблицах и перелили в них данные из промежуточных


PROFFIT
16 ноя 12, 14:13    [13483993]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
qwerty112
Guest
pr--------
...
а поясните, как сделать
"выполнить скрипт таск, который пройдёт по заголовкам столбцов и проверит их,
и - или вылетит с ошибкой (err.Raise)"?
т.е. как мне обращаться к столбцам экселя, срипт же sql-серверный?

нее, скрипт - VBS имелся в виду, - через COM-автоматизацию Excel-я
set exclApp = createobject("Excel.Application")
set exclWb = exclApp.Worbooks.open ... ' и т.д.

для этого там где выполняется пакет, должен быть Эксель установлен ..
16 ноя 12, 14:13    [13483995]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
truncate table
Guest
qwerty112
pr--------
...
а поясните, как сделать
"выполнить скрипт таск, который пройдёт по заголовкам столбцов и проверит их,
и - или вылетит с ошибкой (err.Raise)"?
т.е. как мне обращаться к столбцам экселя, срипт же sql-серверный?

нее, скрипт - VBS имелся в виду, - через COM-автоматизацию Excel-я
set exclApp = createobject("Excel.Application")
set exclWb = exclApp.Worbooks.open ... ' и т.д.

для этого там где выполняется пакет, должен быть Эксель установлен ..

и пытаться разобрать все кейсы из-за которых может упасть вычитка данных из excel ssis пакетом? имхо, ну его нахер.
16 ноя 12, 14:15    [13484007]     Ответить | Цитировать Сообщить модератору
 Re: ssis: как заранее отвалидировать входной файл  [new]
qwerty112
Guest
truncate table
и пытаться разобрать все кейсы из-за которых может упасть вычитка данных из excel ssis пакетом? имхо, ну его нахер.

нуу, ТС говорит только про один возможный "косяк" ... так-то конечно , если "вообщем" - то причины для "падения" могут быть и другие ...

но, так альтернатива-то у него какая ? всё время "лезть лапами" и исправлять .. ? - тоже "не фонтан"
если скрипт будет "лечить" 9 из 10-ти файлов, и лезть разбираться нужно будет только в 1-ом случае из 10-ти, я б "себя переборол бы", и написал бы такое "правИло" :)

---
ещё вариант, без Экселя,
перед транкейтом, попробывать обратится к листу по "правильным" именам полей
select ПравильноеИмяПоля1, ... FROM OPENROWSET('Microsoft.JET.OLEDB.4.0', 'Excel 8.0;Database=C:\test.xls', [xz$])
where 1=0

и при ошибке - на выход
16 ноя 12, 14:36    [13484203]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить