Конструктор табличных значений в языке Transact-SQL

В этом материале мы рассмотрим конструктор табличных значений языка T-SQL, а именно Вы узнаете, что это такое и как использовать данный конструктор на практике.

Что такое конструктор табличных значений в языке T-SQL?

Конструктор табличных значений – это возможность языка Transact-SQL, с помощью которой можно создать набор значений строк, для того чтобы использовать этот набор в качестве таблицы. Другими словами, эта возможность позволяет указывать в одной инструкции DML несколько строк данных.

Конструктор табличных значений можно использовать в предложении VALUES инструкции INSERT, в предложении USING инструкции MERGE, а также для формирования таблицы в предложении FROM.

Данный конструктор можем быть полезен, например, в тех случаях, когда Вам необходимо осуществить вставку нескольких строк в таблицу в одной инструкции INSERT, т.е. Вы не хотите писать для каждой добавляемой строки отдельную инструкцию INSERT.

Упрощённый синтаксис

  
      VALUES ( <Список значений строк> ) [ ,...n ]

Если использовать конструктор табличных значений, для того чтобы вставлять данные в таблицу, то можно в качестве значения указывать DEFAULT, чтобы SQL Server вставлял значение по умолчанию, определенное для столбца.

Во время добавления нескольких строк с помощью инструкции INSERT, значения соблюдают такие же правила преобразования типов данных, как и в инструкции UNION ALL, т.е. при несовпадении типов будет происходить неявное преобразование к типу с более высоким приоритетом. Будет возвращаться ошибка, в случае если указанные значения не поддерживают неявное преобразование.

Для конструктора табличных значений существует ограничение, с помощью него можно создать максимум 1000 строк.

Примеры использования конструктора табличных значений в T-SQL

Для того чтобы понимать, как можно использовать конструктор табличных значений, давайте разберем пару примеров, но сначала давайте создадим тестовую таблицу. В качестве SQL сервера у меня выступает Microsoft SQL Server 2016 Express.

   
       CREATE TABLE dbo.TestTable(
                ProductId INT NOT NULL,
                ProductName VARCHAR(50) NULL,
                Summa MONEY NULL,
        CONSTRAINT PK_TestTable PRIMARY KEY CLUSTERED (ProductId ASC)
        )

Пример с INSERT — вставка нескольких строк

В первом примере давайте вставим несколько строк в таблицу, используя одну инструкцию INSERT.

   
        INSERT INTO dbo.TestTable 
                                (ProductId, ProductName, Summa)
                 VALUES
                                (1, 'Компьютер', 500),
                                (2, 'Принтер', 300),
                                (3, 'Монитор', 300)
        GO
        SELECT * FROM dbo.TestTable

Скриншот 1

Как видим, у нас вставилось 3 строки.

Пример с FROM – формирование таблицы и обращение к ней

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

   
         SELECT * FROM (VALUES (1, 'Компьютер', 500),
                                                  (2, 'Принтер', 300),
                                                  (3, 'Монитор', 300)
                                   ) AS TmpTable (ProductId, ProductName, Summa)

Скриншот 2

Вот таким образом можно использовать конструктор табличных значений в предложение FROM. Точно также его можно использовать в предложение USING инструкции MERGE.

Я бы не сказал, что эта возможность очень полезна, но в то же время я считаю, что о конструкторе табличных значений Transact-SQL знать нужно, в своей книге «Путь программиста T-SQL. Самоучитель по языку Transact-SQL» я подробно рассказываю про другие полезные возможности языка Transact-SQL, на этом у меня все, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.