Microsoft SQL Server
📜 Общее описание и историческая справка
Microsoft SQL Server — реляционная система управления базами данных (РСУБД), разработанная корпорацией Microsoft. Первая версия была выпущена в 1989 году как совместный проект с Sybase (тогда назывался SQL Server 1.0 для OS/2). После распада партнёрства в 1990-х Microsoft продолжила самостоятельную разработку. Версия 7.0 (1998) стала переломной: был полностью переписан движок хранения, появилась поддержка OLAP, а в 2000 году вышла версия 2000 с XML-интеграцией. В 2005 году представлена версия 2005, которая ввела среду SQL Server Management Studio (SSMS), оконные функции, динамическое управление представлениями (DMV). В последующих выпусках (2008, 2012, 2014, 2016, 2017, 2019, 2022) добавлялись поддержка Always On Availability Groups, In-Memory OLTP, интеграция с Azure, Big Data Clusters и улучшения безопасности. На сегодняшний день SQL Server доступен как в Windows, так и в Linux-версиях (начиная с 2017).
Источник: Официальная документация Microsoft, книга "Microsoft SQL Server 2019 Inside Out" (Klein, D., 2020).
🏭 Область применения и рекомендации
SQL Server широко применяется в корпоративной среде для:
- OLTP-систем (обработка транзакций) — банки, ритейл, ERP.
- Хранилищ данных и бизнес-аналитики (SSAS, SSIS, SSRS).
- Приложений на стеке .NET и Azure.
- Критически важных систем с высокими требованиями к безопасности и согласованности данных.
Рекомендации: SQL Server оптимален для средних и крупных организаций, использующих инфраструктуру Microsoft. Для небольших проектов или веб-приложений может быть избыточен с точки зрения стоимости лицензирования (существуют бесплатные редакции: Express, Developer).
🛠️ Как создать/инициировать базу
Для создания базы данных можно использовать SQL Server Management Studio (SSMS) или выполнить SQL-скрипт:
-- Создание новой базы данных
CREATE DATABASE CompanyDB;
GO
-- Использование базы
USE CompanyDB;
GO
-- Создание таблицы
CREATE TABLE Employees (
EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
HireDate DATE DEFAULT GETDATE(),
Salary DECIMAL(18,2)
);
GO
Также можно создать базу через PowerShell, Azure Data Studio или средства автоматизации (DACPAC).
💡 Основные нюансы языка для общения с базой (T-SQL)
SQL Server использует диалект Transact-SQL (T-SQL), который расширяет стандарт SQL следующими возможностями:
- Переменные (объявляются с
@):DECLARE @count INT = 10; - Управляющие конструкции:
IF...ELSE,WHILE,BEGIN...END. - Обработка ошибок через
TRY...CATCH. - Хранимые процедуры, функции, триггеры.
- Оконные функции (
ROW_NUMBER(),RANK()и др.). - Возможность использовать CLR (C#/VB.NET) для расширенной логики.
- Специфические типы данных:
UNIQUEIDENTIFIER,HIERARCHYID,XML,JSON(начиная с 2016).
🔑 Наборы ключевых команд
-- Выборка с топом SELECT TOP 10 * FROM Orders ORDER BY OrderDate DESC; -- Обновление с условием UPDATE Employees SET Salary = Salary * 1.1 WHERE DepartmentID = 5; -- Удаление записей DELETE FROM Products WHERE Discontinued = 1; -- Резервное копирование BACKUP DATABASE CompanyDB TO DISK = 'C:\backups\CompanyDB.bak'; -- Показать список баз SELECT name FROM sys.databases; -- Показать все таблицы в текущей базе SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
📊 Построение запросов (сложные примеры)
Оконная функция для ранжирования сотрудников по зарплате в каждом отделе:
SELECT
DepartmentID,
LastName,
Salary,
RANK() OVER (PARTITION BY DepartmentID ORDER BY Salary DESC) AS RankInDept
FROM Employees;
Общий табличный выражение (CTE) для рекурсивного обхода иерархии подразделений:
WITH OrgCTE AS (
SELECT DepartmentID, ParentDepartmentID, DepartmentName
FROM Departments
WHERE ParentDepartmentID IS NULL
UNION ALL
SELECT d.DepartmentID, d.ParentDepartmentID, d.DepartmentName
FROM Departments d
INNER JOIN OrgCTE o ON d.ParentDepartmentID = o.DepartmentID
)
SELECT * FROM OrgCTE;
Использование динамического управления (DMV) для поиска медленных запросов:
SELECT TOP 10
qs.total_elapsed_time / qs.execution_count AS avg_elapsed_time,
qs.execution_count,
qt.text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY avg_elapsed_time DESC;
📚 Ссылки на документы, статьи, книги
- Официальная документация Microsoft SQL Server
- T-SQL Reference (Microsoft Learn) — полный справочник по языку запросов
- Книга: Itzik Ben-Gan. "T-SQL Fundamentals" (Microsoft Press, 2016) – основы T-SQL.
- Книга: Dmitri Korotkevitch. "Expert SQL Server Transactions" (Apress, 2021) – управление транзакциями.
- Блог: SQL Server Blog (Microsoft) – официальные анонсы и рекомендации.