Основы T-SQL
Для создания базы данных используется команда CREATE DATABASE .
Чтобы создать новую базу данных откроем SQL Server Management Studio. Нажмем на назначение сервера в окне Object Explorer и в появившемся меню выберем пункт New Query .
В центральное поле для ввода выражений sql введем следующий код:
CREATE DATABASE usersdb
Тем самым мы создаем базу данных, которая будет называться «usersdb»:

Для выполнения команды нажмем на панели инструментов на кнопку Execute или на клавишу F5. И на сервере появится новая база данных.
После создания базы даных, мы можем установить ее в качестве текущей с помощью команды USE :
USE usersdb;
Прикрепление базы данных
Возможна ситуация, что у нас уже есть файл базы данных, который, к примеру, создан на другом компьютере. Файл базы данных представляет файл с расширением mdf, и этот файл в принципе мы можем переносить. Однако даже если мы скопируем его компьютер с установленным MS SQL Server, просто так скопированная база данных на сервере не появится. Для этого необходимо выполнить прикрепление базы данных к серверу. В этом случае применяется выражение:
CREATE DATABASE название_базы_данных ON PRIMARY(FILENAME='путь_к_файлу_mdf_на_локальном_компьютере') FOR ATTACH;
В качестве каталога для базы данных лучше использовать каталог, где хранятся остальные базы данных сервера. На Windows 10 по умолчанию это каталог C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA . Например, пусть в моем случае файл с данными называется userstoredb.mdf. И я хочу этот файл добавить на сервер как базу данных. Вначале его надо скопировать в выше указанный каталог. Затем для прикрепления базы к серверу надо использовать следующую команду:
CREATE DATABASE contactsdb ON PRIMARY(FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\userstoredb.mdf') FOR ATTACH;
После выполнения команды на сервере появится база данных contactsdb.
Удаление базы данных
Для удаления базы данных применяется команда DROP DATABASE , которая имеет следующий синтаксис:
DROP DATABASE database_name1 [, database_name2].
После команды через запятую мы можем перечислить все удаляемые базы данных. Например, удаление базы данных contactsdb:
DROP DATABASE contactsdb
Стоит учитывать, что даже если удаляемая база данных была прикреплена, то все равно будут удалены все файлы базы данных.
C# и MS SQL Server
Для работы с базами данных нам естественно прежде всего надо иметь какую-нибудь базу данных. В данном случае мы будем рассматривать основные концепции ADO.NET преимущественно на примере MS SQL Serverа. Поэтому вначале нам надо установить SQL Server Express. Все необходимые материалы для установки можно найти по адресу https://www.microsoft.com/en-US/download/details.aspx?id=42299. Вместе с сервером также устанавливается специальная программа SQL Server Management Studio, которая используется для управления базами данных на сервере.
Для начала создадим простейшую базу данных на MS SQL Server. Для этого откроем SQL Server Management Studio и нажмем на узел Databases правой кнопкой мыши. После этого в открывшемся контекстном меню выберем New Database :

После этого нам открывается окно для создания базы данных:

В нем в поле Database Name нам надо ввести название базы данных. Введем usersdb . Больше здесь вводить ничего не требуется, и поэтому нажмем на ОК.
После этого в узле Databases появляется новый элемент, который представляет только что созданную базу данных usersdb. Раскроем его и нажмем правой кнопкой мыши на его подузел Tables:

Затем нам открывается дизайнер таблицы:

В нем надо указать три столбца: Id, Name и Age, которые будут представлять соответственно уникальный идентификатор пользователя, его имя и возраст. У первого и третьего столбца надо указать тип int (то есть целочисленный), а у столбца Name — тип nvarchar (строковый).
Кроме того, в окне свойств таблицы в поле Name надо ввести имя таблицы — Users, а в поле Identity ввести Id, то есть тем самым указывая, что столбец Id будет идентификатором.
И в конце нам надо установить курсор на столбец Id и в панели инструментов программы нажать на золотой ключик. После этого напротив поля Id также должен появиться золотой ключик. Этот ключик будет указывать, что столбец Id будет выполнять роль первичного ключа.
После этого нажмем на сохранение и затем на клавишу F5 (обновление), и в узле нашей базы данных появится новая таблица, которая будет называться dbo.Users:

Итак, мы создали базу данных и таблицу, которые будут выполнять функции по хранению данных. И теперь мы можем использовать инфраструктуру ADO.NET для подключения к ним.
SQL Server. Создание базы данных, таблиц и связей между ними
В этой статье мы научимся работать с основными объектами базы данных — таблицами, в которых хранится вся информация баз данных.
База данных представляет собой хранилище объектов. Основные из них:
- Таблицы: хранят данные
- Представления (Views): выражения языка SQL, которые возвращают набор данных в виде таблицы
- Хранимые процедуры: выполняют код на языке SQL по отношению к данным к БД (например, получает данные или изменяет их)
- Функции: также код SQL, который выполняет определенную задачу
Используется два типа баз данных: системные и пользовательские. Системные базы данных необходимы серверу SQL для корректной работы. А пользовательские базы данных создаются пользователями сервера и могут хранить любую произвольную информацию. Их можно изменять и удалять, создавать заново. Собственно это те базы данных, которые мы будем создавать и с которыми мы будем работать.
Системные базы данных
В MS SQL Server по умолчанию создается четыре системных баз данных:
- master: эта главная база данных сервера, в случае ее отсутствия или повреждения сервер не сможет работать. Она хранит все используемые логины пользователей сервера, их роли, различные конфигурационные настройки, имена и информацию о базах данных, которые хранятся на сервере, а также ряд другой информации.
- model: эта база данных представляет шаблон, на основе которого создаются другие базы данных. То есть когда мы создаем через SSMS свою бд, она создается как копия базы model.
- msdb: хранит информацию о работе, выполняемой таким компонентом как планировщик SQL. Также она хранит информацию о бекапах баз данных.
- tempdb: эта база данных используется как хранилище для временных объектов. Она заново пересоздается при каждом запуске сервера.
Все эти базы можно увидеть через SQL Server Management Studio в узле Databases -> System Databases:

Эти базы данных не следует изменять, за исключением бд model.
Если на этапе установки сервера был выбран и установлен компонент PolyBase, то также на сервере по умолчанию будут расположены еще три базы данных, которые используется этим компонентом: DWConfiguration, DWDiagnostics, DWQueue.
Создание базы данных в SQL Management Studio
Теперь создадим свою базу данных. Для этого мы можем использовать скрипт на языке SQL, либо все сделать с помощью графических средств в SQL Management Studio.
В данном случае мы выберем второй способ. Для этого откроем SQL Server Management Studio и нажмем правой кнопкой мыши на узел Базы данных. Затем в появившемся контекстном меню выберем пункт Создать базу данных:

После этого нам открывается окно для создания базы данных:

В поле Имя базы данных необходимо ввести название новой бд. Следующее поле «Владелец» задает владельца базы данных. По умолчанию оно имеет значение , то есть владельцем будет тот, кто создает эту базу данных. Оставим все как есть.
Далее идет таблица для установки общих настроек базы данных. Она содержит две строки — первая для установки настроек для главного файла, где будут храниться данные, и вторая строка для конфигурации файла логирования. В частности, мы можем установить следующие настройки:
- Логическое имя: логическое имя, которое присваивается файлу базы данных.
- Тип файла: есть несколько типов файлов, но, как правило, основная работа ведется с файлами данных (ROWS Data) и файлом лога (LOG)
- Файловая группа: означает группу файлов. Группа файлов может хранить множество файлов и может использоваться для разбиения базы данных на части для размещения в разных местах.
- Начальный размер (MБ): устанавливает начальный размер файлов при создании (фактический размер может отличаться от этого значения).
- Автоувеличение/Максимальный размер: при достижении базой данных начального размера SQL Server использует это значение для увеличения файла.
- Путь: каталог, где будут храниться базы данных.
- Имя файла: непосредственное имя физического файла. Если оно не указано, то применяется логическое имя.
После ввода названия базы данных нажмем на кнопку ОК, и бд будет создана.
После этого она появится среди баз данных сервера. Если эта бд впоследствии не потребуется, то ее можно удалить, нажав на нее правой кнопкой мыши и выбрав в контекстном меню пункт Удалить.
Создание таблиц, отношения таблиц, внешние ключи
Ключевым объектом в базе данных являются таблицы. Таблицы состоят из строк и столбцов. Столбцы определяют тип информации, которая хранится, а строки содержат значения для этих столбцов.
Типы данных SQL SERVER
- для строк лучше всего использовать nvarchar (ни в коем случае не используйте nchar, при этом длина строки строго зафиксирована и не зависит от содержимого — т.е. сложно потом будет сравнивать строки, т.к. они будут дополняться ненужными нам пробелами). Если поле очень большое, то лучше использовать nvarchar(MAX) или text, но при этом размер должен быть адекватным, чтобы не замедлять работу в дальнейшем
- для чисел используйте int, float . Важный момент — не нужно всех поражать своим знанием типов и использовать long там, где можно использовать int. Это в дальнейшем немного усложнит обработку таких значений в C# (т.е. по возможности не удивляйте своих коллег такими моментами, лучше удивите их быстрыми запросами SQL)
- булевский тип — bit
- деньги храните либо в типе money, либо в decimal (18,2) , либо в банке
- дата и время – тип datetime . Важный момент – изучите различные функции работы с датами (getdate, datediff, dateadd и др) – это будет часто встречаться
- очень важный тип – это uniqueidentifier . Это GUID – уникальный 32-битный код. Его особенность в том, что каждое новое значение — уникально (вероятность дубля критически мала). Идентификаторы GUID в первую очередь используются для назначения идентификаторов, которые должны быть уникальными в рамках сети, содержащей много компьютеров в различных расположениях. Значение идентификатора GUID для столбца uniqueidentifier формируется с помощью функции newid() .
В прошлой теме была создана база данных university. Теперь определим в ней первую таблицу. Опять же для создания таблицы в SQL Server Management Studio можно применить скрипт на языке SQL, либо воспользоваться графическим дизайнером. В данном случае выберем второе.
Для этого раскроем узел базы данных university в SQL Server Management Studio, нажмем на его подузел Таблицы правой кнопкой мыши и далее в контекстном меню выберем Создать -> Таблица.

После этого нам откроется дизайнер таблицы. В центральной части в таблице необходимо ввести данные о столбцах таблицы. Дизайнер содержит три поля:
- Имя столбца: имя столбца
- Тип данных: тип данных столбца. Тип данных определяет, какие данные могут храниться в этом столбце. Например, если столбец представляет числовой тип, то он может хранить только числа.
- Разрешить значения Null: может ли отсутствовать значение у столбца, то есть может ли он быть пустым
Допустим, нам надо создать таблицу с данными учащихся в учебном заведении. Для этого в дизайнере таблицы четыре столбца: Id, FirstName, LastName и Year, которые будут представлять соответственно уникальный идентификатор пользователя, его имя, фамилию и год рождения. У первого и четвертого столбца надо указать тип int (то есть целочисленный), а у столбцов FirstName и LastName — тип nvarchar(50) (строковый).
Затем в окне Properties, которая содержит свойства таблицы, в поле Name надо ввести имя таблицы — Students, а в поле Identity ввести Id, то есть тем самым указывая, что столбец Id будет идентификатором.
Имя таблицы должно быть уникальным в рамках базы данных. Как правило, название таблицы отражает название сущности, которая в ней хранится. Например, мы хотим сохранить студентов, поэтому таблица называется Students (слово студент во множественном числе на английском языке). Существуют разные мнения по поводу того, стоит использовать название сущности в единственном или множественном числе (Student или Students). В данном случае вопрос наименования таблицы всецело ложится на разработчика базы данных.
И в конце нам надо отметить, что столбец Id будет выполнять роль первичного ключа (primary key). Первичный ключ уникально идентифицирует каждую строку. В роли первичного ключа может выступать один столбец, а может и несколько.
Для установки первичного ключа нажмем на столбец Id правой кнопкой мыши и в появившемся меню выберем пункт Задать первичный ключ.
После этого напротив поля Id должен появиться золотой ключик. Этот ключик будет указывать, что столбец Id будет выполнять роль первичного ключа.
И после сохранения в базе данных university появится таблица Students:
Мы можем заметить, что название таблицы на самом деле начинается с префикса dbo. Этот префикс представляет схему. Схема определяет контейнер, который хранит объекты. То есть схема логически разграничивает базы данных. Если схема явным образом не указывается при создании объекта, то объект принадлежит схеме по умолчанию — схеме dbo.
Нажмем правой кнопкой мыши на название таблицы, и нам отобразится контекстное меню с опциями:

С помощью этих опций можно управлять таблицей. Так, опция Delete позволяет удалить таблицу. Опция Design откроет окно дизайнера таблицы, где мы можем при необходимости внести изменения в ее структуру.
Для добавления начальных данных можно выбрать опцию Изменить первые 200 строк. Она открывает в виде таблицы 200 первых строк и позволяет их изменить. Но в нашей таблице пока пусто, т.к. только что ее создали..
Создание таблиц и связей между ними с помощью диаграмм
В SSMS есть удобный графический инструмент для создания таблиц, а также для установки связей между ними — это диаграммы. Правой клавишей кликаем на пункт “диаграммы баз данных”, далее выбираем “создать диаграмму базы данных”
Далее может появиться вот такое сообщение (т.к. таблиц пока нет) :

Нажимаем “да” и видим следующее окно:

После этого кликаем правой кнопкой мышки по экрану и выбираем пункт “создать таблицу”:

Задаем название таблицы:

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

Добавляем первичный ключ (primary key). Для этого кликаем правой кнопкой мышки на поле рядом с названием “id” и выбираем “задать первичный ключ”:, рядом с “id” появится золотой ключик.

После перемещаемся на правую панель:

Здесь мы меняем значение на “да” (если нужно чтоб у id был автоинкремент, выбираем начальное значение “id”, а также шаг автоинкремента).
Таким образом создаем нужные таблицы. Таблицы можно менять местами, увеличивать или отдалять.
Несколько слов о связях между таблицами.
Выделяют следующие типы связей:
- один к одному
- один ко многим
- многие ко многим
Связь один к одному : встречается не часто, объекту одной сущности соответствует один объект другой сущности (пример: один пользователь один блог). Иными словами первичный ключ зависимой таблицы в то же время является внешним ключом, который ссылается на первичный ключ из главной таблицы.
Связь один ко многим : самый часто встречающийся тип связей. Несколько строк из зависимой (дочерней) таблицы зависят от одной строки главной (родительской) таблицы. Пример: в одной группе много студентов.
Связь многие ко многим : одна строка из одной таблицы (А) может быть связана со множеством строк из другой таблицы (Б). В свою очередь одна строка из таблицы Б может быть связана со множеством строк из таблицы А. Однако в SQL server нельзя установить связь многие ко многим между двумя таблицами. Это можно сделать с помощью вспомогательной промежуточной таблицы (иногда данные из этой таблицы представляют как отдельную сущность).
Теперь задаем связи между таблицами. Для этого в таблице, где есть внешний ключ (foreign key) нажимаем левой кнопкой мышки на поле рядом с названием внешнего ключа и не отпуская тянем на вторую таблицу к полю “id”

Отпускаем кнопку на этом поле и появляется окно:

выбираем “ОК”, а затем еще раз “ОК”.
В итоге у нас появляется связь между двумя таблицами:

В итоге мы научились добавлять таблицы, связывать и создавать столбцы.
Дополнительные материалы
- Наиболее часто используемые функции в SQL Server 2005/2008
- Проблема с доступом к таблице БД
- Пример создания структуры базы данных
- Создание структуры БД через диаграммы
- Как массово залить данные в таблицу БД через CSV (Excel)
Microsoft SQL Server: работа с базами данных
Наши пользователи могут использовать базы данных Microsoft SQL Server 2016 на своих виртуальных площадках в рамках, предусмотренных соответствующими тарифами.
Параметры и способы соединения с Microsoft SQL Server
- Имя хоста (сервера), на котором размещена база данных Microsoft SQL Server: uXXXXX.mssql.masterhost.ru;
- Порт: 1433;
- Логин: соответствует названию виртуальной площадки — uXXXXX;
- Пароль: указан в письме, которое пользователь получает при регистрации;
- Имя базы данных: соответствует названию виртуальной площадки — uXXXXX;
- Подключение нужно осуществлять по протоколу TCP/IP.
Подключение к SQL-серверу через «Microsoft SQL Server Management Studio Express»
Чтобы получить доступ к базе данных Microsoft SQL Server, возможно использовать Microsoft SQL Server Management Studio Express .

В параметрах выберите в качестве сетевого протокола TCP/IP.

Создание новой базы данных
Новую базу данных вы можете создать через раздел Услуги, в Личном кабинете. Выберите нужную «виртуальную площадку», далее в разделе «MS SQL» нажать на кнопку «+ База MS SQL». Затем вам необходимо указать имя (логин) и выбрать владельца новой базы.
Использовать Microsoft SQL Server Management Studio для создания новых баз данных нельзя.
Создание нового логина
Создать новый логин для базы данных Microsoft SQL вы можете через раздел Услуги, в Личном кабинете. Выберите нужную «виртуальную площадку», далее в разделе «MS SQL» нажать на кнопку «+ Пользователь MS SQL». Затем вам необходимо указать имя (логин) для нового пользователя.
Уменьшение физического размера файлов баз данных и лога транзакций MS SQL Server.
- Из графического интерфейса Microsoft SQL Server Management Studio:
- В обозревателе объектов подключитесь к экземпляру Microsoft SQL Server, 2016 Web Edition и разверните его.
- Разверните узел «Базы данных», затем правой кнопкой мыши щелкните базу данных, которую нужно сжать.
- В меню «Задачи» выберите «Сжать» и щелкните «База данных». Или установите флажок «Реорганизовать файлы перед освобождением неиспользуемого места». Если он установлен, необходимо указать значение параметра «Максимально доступное свободное место в файлах после сжатия».
DBCC SHRINKFILE (N'uXXXXXX.Log' , 0, TRUNCATEONLY) DBCC SHRINKDATABASE (N'uXXXXXX')Изменение кодировки сравнения (collation)
По умолчанию кодировка collation выставлена как Cyrillic_General_CI_AS, изменить кодировку для сравнений можно следующим SQL-запросом:
ALTER DATABASE [uXXXXX] COLLATE SQL_Latin1_General_CP1251_CS_AS GOгде uXXXXX — имя БД, где требуется данная операция.
Список доступных кодировок можно узнать так:
SELECT * FROM ::fn_helpcollations()Как дать права на доступ к базе определенному логину
Для SQL — дополнительный SQL логин, но настраивать права нужно самому: Заводим еще один SQL логин — uXXX_Ann
Для начала используем нашу базу:
USE [uXXXX] GOСоздаем пользователя для определенного «логина»:
CREATE USER [InetUser] FOR LOGIN [uXXX_Ann] GOНаделяем его правами (например только чтение таблиц):
EXEC sp_addrolemember N'db_datareader', N'InetUser' GOИли можем дать пользователю только конкретные права, на конкретные таблицы. Например, давайте дадим пользователю InetUser права на SELECT, INSERT, UPDATE для таблицы test, следующим SQL-запросом :
USE [uXXXXXX] GO GRANT SELECT ON [dbo].[test] TO [InetUser] GO GRANT INSERT ON [dbo].[test] TO [InetUser] GO GRANT UPDATE ON [dbo].[test] TO [InetUser] GOПри всем при этом, при осуществлении доступа через SQL Management Studio, под дополнительным логином не являющимся владельцем базы, не будет видно базу данных в списке доступных баз, но будет возможность выполнять разрешенные SQL-запросы .
Как получить раскладку по размеру таблиц в базе
Это можно сделать следующим SQL-запросом:
SET NOCOUNT ON DBCC UPDATEUSAGE(0) -- DB size. EXEC sp_spaceused -- Table row counts and sizes. CREATE TABLE #t ( [name] NVARCHAR(128), [rows] CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18) ) INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?''' SELECT * FROM #t -- # of rows. SELECT SUM(CAST([rows] AS int)) AS [rows] FROM #t DROP TABLE #t
