Знакомство с Microsoft SQL Server и утилитой sqsh
7 января 2016
Пожалуйста, без паники! Да, РСУБД с открытым исходным кодом — наше все. Но если вы тру программист, то ваше приложение должно поддерживать много разных СУБД, в том числе такую эзотерику, как Microsoft SQL Server :) В этой заметке мы научимся основам работы с Microsoft SQL Server и убедимся, что в действительности он мало чем отличается от тех же PostgreSQL или MySQL.
Установка и настройка
Для своих страшных опытов я использовал машину с Windows Server 2008 R2. На нее был установлен Microsoft SQL Server Express Edition 2005 SP3, который можно скачать отсюда. Отмечу, что это далеко не самая новая версия Microsoft SQL Server. Например, на момент написания этих строк была доступна версия 2014-го года. Вам может захотеться взять версию посвежее, например, потому что LIMIT и OFFSET появились только в Microsoft SQL Server 2012. Да, Express версия SQL Server совершенно бесплатна, но позволяет хранить не более 10 Гб данных.
Установка ничем не примечательна, просто жмем Next, Next, Next.
По умолчанию SQL Server не слушает никакой TCP-порт. Это можно исправить при помощи приложения SQL Server Configuration Manager. Здесь есть предельно понятная инструкция с картинками. Если все было сделано правильно, команда netstat -an
, выполненная в cmd.exe или Power Shell, должна показать, что порт 1433 теперь кто-то слушает. В Windows Firewall не забываем добавить Inbound Rule, разрешаем хождение на порт 1433 с нужных хостов.
Частая проблема, на которую можно наткнуться — ошибка:
… получаемая при попытке подключения к SQL Server, например, пользователем под именем sa
. Если вы столкнетесь с такой ошибкой, здесь описано, как ее исправить.
Подключаемся через sqsh
Под Linux есть довольно удобный консольный клиент к SQL Server под названием sqsh. Удобен он помимо прочего тем, что в нем работает сочетание Ctr+R, прямо как в bash.
Установка под Ubuntu:
В файл ~/.freetds.conf пишем:
# TDS protocol version
tds version = 7.0
… иначе не будет логинить, см этот ответ на StackOverflow.
Подключаемся к базе данных как-то так:
-UServerInstance\\Administrator -mpretty
Здесь MyDatabaseName — название вашей базы данных, 10.110.0.10 — IP-адрес хоста, на котором крутится СУБД, ServerInstance — имя инстанса, например, «SQLEXPRESS», Administrator — имя пользователя, а mpretty — флаг, без которого результат выполнения всех запросов будет выглядеть, как говно.
Создать базу данных:
2> go
Переключиться на другую БД:
2> go
Создание таблицы:
varchar(256) not null, password varchar(256) not null, constraint
cs_unique_login unique(login))
2> go
Здесь identity — это аналог auto_increment из MySQL. Остальное должно быть понятно.
Добавить строку:
2> go
Достать строки:
2> go
Идентификаторы вроде названия полей можно брать в квадратные скобки:
2> go
Обновление данных:
2> go
Удаление:
2> go
Грохнуть базу данных:
2> go
1> drop database my_test_db
2> go
Начать транзакцию:
2> go
Откатить транзакцию:
2> go
Закоммитить транзакцию:
2> go
Простой пример использования переменных:
2> set @users_number = (select count(*) from users)
3> go
Посмотреть список таблиц в базе данных:
2> go
Тут много системных таблиц. Обычно интерес представляю те, у которых в колонке owner написано dbo.
Информация о колонках в таблице:
2> go
Список баз данных:
2> go
Информация о базе данных:
2> go
Вездесущий go можно комбинировать с командами шелла. Например:
2> go | less -S
Или:
2> go > /home/eax/temp/out.txt
Вертикальный вывод:
2> go -m vert
Вывод в CSV:
2> go -m csv
Выход:
Как видите, все довольно просто. А вы боялись!
Заключение
Помимо sqsh есть множество других вариантов. Например, DbSchema, о которой я рассказывал в заметке Как спроектировать схему базы данных, прекрасно поддерживает MS SQL Server. Кстати, еще она поддерживает Cassandra и MongoDB. Также из клиентов к MS SQL Server заслуживает внимания DataGrip (бывший 0xDBE) от компании JetBrains.
Мой вердикт — в первом приближении Microsoft SQL Server вполне себе обычная РСУБД. Пока вам не захочется, к примеру, посмотреть лог медленных запросов, вы и не заметите особой разницы по сравнению с любой другой РСУБД. А за нормальным ORM так и тем более не заметите.
А приходилось ли вам работать с MS SQL Server? Как впечатления?
Метки: СУБД.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.