Подключение к MSSQL из консоли

Для доступа к MSSQL из командной строки у Microsoft есть утилита sqlcmd.

Ее последняя версия требует для работы ODBC драйвер версии 17. Ранее я писал, что для PHP7 нужен драйвер версии не выше 13. Ничего страшного, как оаказалось, обе версии нормально уживаются.

После установки можно открыть командную строку или powershell и подключаться:

sqlcmd   /S 192.168.0.3  /d databasename -U username -P password

Основные ключи:

/S = адрес сервера
/d = имя базы данных
-E = Windows authentication (при необходимости)
-U = SQL Server authentication/user.
-P = пароль

После успешной авторизации попадаем в интерфейс утилиты. Слева идут номера строк. Текст запроса вводится обычным образом. Окончание запроса - точка с запятой. Запуск на выполнение - команда GO.

Можно писать текст запроса непосредственно при вызове утилиты:

sqlcmd   /S 192.168.0.3  /d databasename -U username -P password -Q "select col1, col2, col3 from SomeTable"

Можно поместить текст запроса в текстовый файл и импортировать его в утилиту. Ниже пример с импортом запроса из файла и выгрузкой результатов в csv:

sqlcmd   /S 192.168.0.3  /d databasename -U username -P password -u -i "C:\TEMP\sql.txt" -o "C:\TEMP\sql-out.csv" -W  -s ","

Здесь ключи:

-i = путь к файлу с текстом запроса
-o = путь к выходному файлу
-u = кодировка utf-8
-W = удалить конечные пробелы во всех полях
-s "," = разделитель полей - запятая

В случае экспорта есть особенность. В файл попадает весь вывод результатов запроса, в том числе и количество затронутых строк. Очевидно, что при экспорте в csv это только мешает. Избавиться от подсчета количества строк можно добавив перед запросом set nocount on; и set nocount off; после запроса.