close

Transact-SQL

Перейти к навигации Перейти к поиску
Язык программирования Transact-SQL
АвторМайкрософт , Сибас
Парадигмыпроцедурное программирование

В информатике Transact-SQL (иногда сокращенно T-SQL ) — это проприетарное расширение языка SQL , разработанное Microsoft и Sybase . Версия Microsoft поставляется с Microsoft SQL Server , тогда как Sybase использует этот язык в Adaptive Server Enterprise , преемнике Sybase SQL Server .

Увеличьте производительность SQL, добавив:

Управление потоком и языковая структура

Ключевые слова , с помощью которых Transact - SQL реализует управление потоком, включают BEGINe END,,,, и BREAK,,, и .CONTINUEGOTOIFELSERETURNWAITFORWHILE

IFи разрешить условноеELSE выполнение блоков команд. Следующий пакет печатает «праздничный день», если текущая дата — суббота или воскресенье, или «будний день» в противном случае.

IF DATEPART (dw, GETDATE ()) = 7 OR DATEPART (dw, GETDATE ()) = 1
   ПЕЧАТЬ 'Это государственный праздник.'
ЕЩЕ
   PRINT 'Сегодня будний день'.

BEGINи ENDразграничить блок инструкций. Если несколько операторов должны контролироваться условиями, показанными в предыдущем примере, мы можем использовать BEGIN и END следующим образом:

IF DATEPART (dw, GETDATE ()) = 7 OR DATEPART (dw, GETDATE ()) = 1
НАЧИНАТЬ
   ПЕЧАТЬ 'Это государственный праздник.'
   ПЕЧАТЬ 'Возьми отпуск!'
КОНЕЦ
ЕЩЕ
НАЧИНАТЬ
   PRINT 'Сегодня будний день'.
   ПЕЧАТЬ 'На работу!'
КОНЕЦ

WAITFORподождите определенное время или до определенного времени суток. Эта инструкция может использоваться для выполнения отложенных действий или для блокировки выполнения операции до достижения определенного времени.

RETURNон используется для немедленного выхода из хранимой процедуры или определенной функции.

BREAKвызывает выход из цикла, начинающегося с a WHILE, при CONTINUEвыполнении следующего цикла в цикле. Ниже приведен пример цикла WHILE.

Локальные переменные

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

DECLAREобъявляет переменную, давая ей имя и тип. Чтобы присвоить ей значение, используется SET, и впоследствии переменную можно использовать, используя ее имя в качестве ссылки.

Этот сценарий объявляет переменную как целое число, инициализирует ее, а затем использует WHILEцикл.

ОБЪЯВИТЬ @Counter INT
УСТАНОВИТЕ @Счетчик = 10
ПОКА @Counter> 0
НАЧИНАТЬ
   PRINT 'Количество циклов:' + CONVERT (VARCHAR (10), @Counter)
   УСТАНОВИТЕ @Счетчик = @Счетчик - 1
КОНЕЦ

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

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

ЗАЯВИТЬ @ContaArticoli INT
ВЫБЕРИТЕ @ContaArticoli = СЧИТАТЬ (*) ИЗ статей
ВСТАВЬТЕ В ЗНАЧЕНИЯ SizeLog (VerificationTime, ArticleCount) (GETDATE(), @ContaArticoli)

Здесь, например, считывается количество строк, содержащихся в таблице «Статьи», затем в таблицу «SizeLog» добавляется строка, содержащая количество строк и текущее время.

Расширенные операторы DELETE и UPDATE

В Transact-SQL к операторам DELETE и UPDATE можно добавить параметр, FROMкоторый позволяет связываться с другими таблицами с помощью файла JOIN. В следующем примере удаляются все записи таблицы «Пользователи», отмеченные флагом «Простой».

УДАЛИТЬ пользователей
  ОТ пользователей как ты
  ПРИСОЕДИНЯЙТЕСЬ к Users_flags как f
    ВКЛ u.id = f.id
 ГДЕ f.name = 'Простой'

Критика

По мнению критиков, новые функции Transact-SQL не только нарушают совместимость со стандартным языком SQL, но и противоречат предположению о том, что SQL предназначен только для декларативного языка (как это было на самом деле, по крайней мере, до стандартной версии). 1999 г. SQL ). Иными словами, дополнительные возможности Transact-SQL были бы реализованы за счет введения действительно нового языка императивного типа , с запутанным и не очень линейным решением, когда вместо этого, по мнению критиков, могли быть реализованы те же самые возможности используя другой уровень программирования или используя тот же SQL.

Связанные элементы

Внешние ссылки