ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Использование списка значений в SQL Server: переменная myList

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если ваша работа связана с обработкой небольших списков, то оптимально использовать табличные переменные:

SQL
Скопировать код
DECLARE @List TABLE (Value INT);
INSERT INTO @List VALUES (1), (2), (3);

Но если необходима манипуляция объемными наборами данных, то лучше применять временные таблицы:

SQL
Скопировать код
CREATE TABLE #TempList (Value INT);
INSERT INTO #TempList VALUES (1), (2), (3);

При выборе между табличными переменными и временными таблицами ключевым фактором является размер списка для обработки.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Углубленное обсуждение: эффективная обработка списков в SQL Server

Секретный ингредиент: использование пользовательских табличных типов

Пользовательские табличные типы нацелены на унификацию структуры данных и повышение эффективности запросов:

SQL
Скопировать код
CREATE TYPE dbo.ListType AS TABLE(Value INT);

Этот инструмент, подобно любимому кофе, станет наиболее подходящим решением во многих процедурах и обеспечит высокую производительность.

Приступаем к делу: параметры табличного типа

Параметры табличного типа облегчают передачу массивов данных в процедуры:

SQL
Скопировать код
CREATE PROCEDURE UseList 
    @ListAsParameter dbo.ListType READONLY
AS
BEGIN
    SELECT * FROM SomeTable WHERE ColumnName IN (SELECT Value FROM @ListAsParameter);
END;

Их использование позволяет уменьшить сложность операций и повысить производительность за счет сокращения объема передаваемых данных.

Красота приспособления: динамический SQL

Для гибкости и включения переменных списков в запросы вполне подходит динамический SQL:

SQL
Скопировать код
DECLARE @SQL NVARCHAR(MAX), @Params NVARCHAR(MAX);
SET @SQL = N'SELECT * FROM SomeTable WHERE ColumnName IN (' + @Params + N')';
EXEC sp_executesql @SQL;

Применяя сконкатенированную строку значений списка вместо @Params, вы можете сделать ваш запрос универсальным.

Визуализация

При работе со списками в SQL Server важно уметь правильно их организовать, подобно укладке вещей в чемодан:

SQL
Скопировать код
DECLARE @Suitcase TABLE(Item VARCHAR(MAX));
INSERT INTO @Suitcase VALUES ('👕'), ('👖'), ('👟');

Это как подготовка вещей к отпуску:

SQL
Скопировать код
DECLARE @ItemList TABLE(Item VARCHAR(MAX));
INSERT INTO @ItemList VALUES ('Shirt'), ('Pants'), ('Shoes');

Таким образом, @ItemList выступает в роли укомплектованного чемодана.

Эффективные приемы работы со списками

Искусство нарезки: разделение строк с разделителями

Функция STRING_SPLIT упрощает обработку длинных списков значений:

SQL
Скопировать код
CREATE FUNCTION dbo.SplitList(@List nvarchar(MAX))
RETURNS @ReturnTable TABLE(Value nvarchar(50))
AS
BEGIN
    INSERT INTO @ReturnTable
    SELECT Value FROM STRING_SPLIT(@List, ',');
    RETURN;
END;

Она разделяет значения для дальнейшей обработки в запросах.

Бытров и эффективно: Использование LIKE с подстановочными знаками

Метод LIKE предоставляет возможность поиска по шаблону:

SQL
Скопировать код
DECLARE @Pattern VARCHAR(100) = '%val%';
SELECT * FROM SomeTable WHERE ColumnName LIKE @Pattern;

При работе с неоднозначными списками функция LIKE обеспечивает быструю фильтрацию соответствий.

Гладкий переход: CAST

Функция CAST также позволяет интегрировать списки в запросы с помощью SELECT:

SQL
Скопировать код
SELECT * FROM SomeTable 
WHERE ColumnID IN (CAST('1,2,3' AS dbo.ListType));

Она преобразует строку в таблицу значений, что упрощает их использование в операторе IN.

Полезные материалы

  1. Использование параметров таблиц в хранимых процедурах — подробное руководство о параметрах табличного типа.
  2. Основы индексированных представлений в SQL Server — статья о том, как улучшить проведение запросов с помощью индексированных представлений.
  3. Выполнение динамических SQL-команд — руководство по применению динамического SQL для более гибких процедур.
  4. Устаревшие команды SQL Server — обзор устаревших SQL-практик и актуальные рекомендации по их замене.