Знакомство с 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 с нужных хостов.

Частая проблема, на которую можно наткнуться — ошибка:

Not associated with a trusted SQL Server connection.

… получаемая при попытке подключения к SQL Server, например, пользователем под именем sa. Если вы столкнетесь с такой ошибкой, здесь описано, как ее исправить.

Подключаемся через sqsh

Под Linux есть довольно удобный консольный клиент к SQL Server под названием sqsh. Удобен он помимо прочего тем, что в нем работает сочетание Ctr+R, прямо как в bash.

Установка под Ubuntu:

sudo apt-get install sqsh

В файл ~/.freetds.conf пишем:

[global]
    # TDS protocol version
    tds version = 7.0

… иначе не будет логинить, см этот ответ на StackOverflow.

Подключаемся к базе данных как-то так:

sqsh -DMyDatabaseName -S10.110.0.10 \
  -UServerInstance\\Administrator -mpretty

Здесь MyDatabaseName — название вашей базы данных, 10.110.0.10 — IP-адрес хоста, на котором крутится СУБД, ServerInstance — имя инстанса, например, «SQLEXPRESS», Administrator — имя пользователя, а mpretty — флаг, без которого результат выполнения всех запросов будет выглядеть, как говно.

Создать базу данных:

1> create database my_test_db
2> go

Переключиться на другую БД:

1> use my_test_db
2> go

Создание таблицы:

1> create table users (id integer primary key identity, login
   varchar(256) not null, password varchar(256) not null, constraint
   cs_unique_login unique(login))
2> go

Здесь identity — это аналог auto_increment из MySQL. Остальное должно быть понятно.

Добавить строку:

1> insert into users (login, password) values ('afiskon', '123456')
2> go

Достать строки:

1> select * from users
2> go

Идентификаторы вроде названия полей можно брать в квадратные скобки:

1> select [login] from users;
2> go

Обновление данных:

1> update users set password = '654321' where login = 'afiskon'
2> go

Удаление:

1> delete from users where id = 1
2> go

Грохнуть базу данных:

1> use some_other_db
2> go
1> drop database my_test_db
2> go

Начать транзакцию:

1> begin transaction
2> go

Откатить транзакцию:

1> rollback
2> go

Закоммитить транзакцию:

1> commit
2> go

Простой пример использования переменных:

1> declare @users_number int
2> set @users_number = (select count(*) from users)
3> go

Посмотреть список таблиц в базе данных:

1> sp_tables
2> go

Тут много системных таблиц. Обычно интерес представляю те, у которых в колонке owner написано dbo.

Информация о колонках в таблице:

1> sp_columns users
2> go

Список баз данных:

1> sp_helpdb
2> go

Информация о базе данных:

1> sp_helpdb my_test_db
2> go

Вездесущий go можно комбинировать с командами шелла. Например:

1> sp_columns users
2> go | less -S

Или:

1> sp_columns users
2> go > /home/eax/temp/out.txt

Вертикальный вывод:

1> sp_columns users
2> go -m vert

Вывод в CSV:

1> sp_columns users
2> go -m csv

Выход:

1> quit

Как видите, все довольно просто. А вы боялись!

Заключение

Помимо sqsh есть множество других вариантов. Например, DbSchema, о которой я рассказывал в заметке Как спроектировать схему базы данных, прекрасно поддерживает MS SQL Server. Кстати, еще она поддерживает Cassandra и MongoDB. Также из клиентов к MS SQL Server заслуживает внимания DataGrip (бывший 0xDBE) от компании JetBrains.

Мой вердикт — в первом приближении Microsoft SQL Server вполне себе обычная РСУБД. Пока вам не захочется, к примеру, посмотреть лог медленных запросов, вы и не заметите особой разницы по сравнению с любой другой РСУБД. А за нормальным ORM так и тем более не заметите.

А приходилось ли вам работать с MS SQL Server? Как впечатления?

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.