Войти

Показать полную графическую версию : [решено] MSSQL Вывод таблиц в файлы


lxa85
31-03-2013, 18:30
Здравствуйте.
Помогите пожалуйста с следующей ситуацией:
Есть запущенный локально MSSQL сервер.
Тип сервера: "Компонент Database Engine"
Имя: LXA85\MSSQL_STANDART

На сервере лежит база данных: Work

Требуется:
Пройти по всем таблицам данной базы и выполнить запрос
SELECT * FROM TableName; // Где TableName -- имя текущей таблицы
Результат сохранить в
файл с именем TableName в форме отчета или в форме CSV. Дальше уже разберу средствами python.

Т.е. как я понимаю надо получить список баз, затем в цикле foreach выполнить запрос.

Все, дальше я ничего не понимаю. Особенно, как подключиться к базе и как понять, что этому мешает.
Интернет почти единогласно твердит Invoke-Sqlcmd, но мне от этого не легче.
Даже когда PS из Managment Studio запускаю.

lxa85
31-03-2013, 21:01
С помощью чьей то матери получился следующий скрипт:
PS SQLSERVER:\SQL\LXA85\MSSQL_STANDART\Databases\Work>
#Прописываем путь для сохранения файлов
$file='D:\SQL\input ' #в кавычках!
#Получаем список таблиц. Наверно можно общаться сразу с первоисточником, но мне было проще так
$tables = Get-ChildItem .\Tables
# Обрабатываем в цикле
# Для каждой записи, именуемой в дальнейшем $t в списке таблиц $table
foreach ($t in $tables)
{
#$filet1 = $file+'\'+$t.name+'.csv' #Формат "через запятую"
#$filet2 = $file+'\'+$t.name+'.rpt' #Правильный rpt получить не удалось, поэтому для красоты
#Invoke-Sqlcmd "Select * From $t" | Export-csv $filet1
#Invoke-Sqlcmd "Select * From $t" | Out-File $filet2
#Поправка!
#Эта зараза имеет противное св-во съедать поля. Особенно большие, текстовые
#Кроме того, если ее не пнуть, то она выставляет формат, какой понравится. Либо табличный, либо списочный.
(Подробнее (http://www.intuit.ru/department/os/compromtwin/17/2.html) )
#Ясен крендель, что заниматься дополнительным анализом строения файла желания вообще никакого.
# Приходится ей явно говорить, в каком виде я желаю получить ответ. Объем файлов конечно не уменьшается, а растет довольно хорошо.
#В итоге тело цикла:
$filet = $file+'\'+$t.name+'.lst'
Invoke-Sqlcmd "Select * From $t" | Format-List | Out-File $filet
}
# вот и все.
Да чтобы этим программистам всю жизнь с психопатами общаться!




© OSzone.net 2001-2012