С каким функционалом Transact-SQL (T-SQL) вы работали на предыдущем месте?

«С каким функционалом Transact-SQL (T-SQL) вы работали на предыдущем месте?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

На проектах с SQL Server активно использовал следующий функционал T-SQL:

  • Хранимые процедуры и функции: Для инкапсуляции бизнес-логики, повышения безопасности и производительности.
  • Триггеры (DML): В основном для аудита изменений и поддержания сложной целостности данных, с осторожностью из-за влияния на производительность.
  • CTE (Common Table Expressions) и рекурсивные запросы: Для работы с иерархическими данными и построения сложных, читаемых запросов.
  • Оконные функции: ROW_NUMBER(), RANK(), SUM() OVER() для аналитики без группировки исходных строк.
  • Динамический SQL: Для построения гибких запросов, где структура запроса зависит от параметров. Всегда с параметризацией для защиты от SQL-инъекций.
    DECLARE @TableName sysname = 'Users', @Id INT = 5;
    DECLARE @Sql NVARCHAR(MAX);
    SET @Sql = N'SELECT * FROM ' + QUOTENAME(@TableName) + ' WHERE Id = @ParamId';
    EXEC sp_executesql @Sql, N'@ParamId INT', @ParamId = @Id;
  • Явное управление транзакциями: BEGIN TRAN, COMMIT, ROLLBACK для атомарности операций.
  • Временные таблицы (#temp) и табличные переменные (@table): Для хранения промежуточных результатов.
  • Оператор MERGE: Для выполнения операций "upsert" (обновить или вставить) одной командой.
  • PIVOT/UNPIVOT: Для преобразования данных из строк в столбцы и обратно.