SQL - автоматические результаты в CSV или текстовый файл
Мне было интересно, если кто-нибудь может помочь.
У меня есть несколько запросов в SQL (все в отдельных *.sql файлах). Я хотел знать, есть ли способ автоматически выполнять эти запросы или массово запускать их для сохранения в файл CSV или TXT?
Кроме того, в этих запросах есть переменные, которые нужно будет еженедельно изменять перед выполнением запросов.
Благодарю.
KJ
Не могли бы вы предоставить дополнительную помощь в отношении переменных? Ранее я бы объявил и установил переменные как:
ОБЪЯВИТЬ @TW_FROM DATETIME
ОБЪЯВИТЬ @TW_TO DATETIME
SET @TW_FROM = '2015-11-16 00:00:00'; SET @TW_TO = '2015-11-22 23:00:00';
Как мне сделать это с помощью sqlcmd?
4 ответа
Да, вы можете использовать sqlcmd для этого.
Прежде всего - переменные. Вы можете ссылаться на свои переменные в файлах.sql, используя $(variablename)
везде, где вы хотите заменить переменную. Например,
use $(dbname);
select $(columnname) from table1 where column= '$(var1)'
Затем вы вызываете sqlcmd с помощью следующей команды (обратите внимание на аргумент - v переменные)
sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred"
Чтобы вывести это в файл, вы помечаете> filename.txt в конце
sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.txt
Если вы хотите вывести в csv, вы также можете указать разделитель с помощью аргумента -s (обратите внимание, что для сервера используется заглавная буква S). Итак, теперь у нас есть
sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.csv
Если вы хотите вывести несколько команд в один и тот же файл CSV или TXT, используйте >> вместо>, чтобы добавить его в конец файла, а не заменять его.
sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" >> filename.csv
Чтобы выполнить это для нескольких сценариев, вы можете поместить операторы в пакетный файл, а затем менять переменные каждую неделю.
Преобразуйте ваши текущие записи в хранимую процедуру. Затем вы можете передать свои переменные и выполнить запрос.
Если у вас есть агент SQL Server (стандарт SQL или выше), вы можете использовать его для автоматизации запуска хранимых процедур.
В противном случае то же самое может быть достигнуто с помощью планировщика задач в Windows.
Что касается экспорта в CSV, это будет полезно.
Это зависит от того, где ваш SQL Server работает. Это может быть довольно сложно написать что-нибудь в нужное место.
Вы могли бы прочитать о BCP.
Мое предложение:
Создайте UDF (лучше всего inline-UDF!) Из всех ваших запросов в вашей базе данных. Позвоните им из EXCEL или любого другого подходящего продукта. Возможно, вы захотите настроить Excel, где все ваши запросы заполняются по одному на каждом листе автоматически
Вы можете написать командный файл, который использует sqlcmd:
Это позволит вам вызывать файлы сценариев в цикле и выводить результаты в файл.