Основные объекты Transact-SQL

136 Исходники баз данных

Языком компонента SQL Server Database Engine является Transact-SQL, который обладает основными свойствами любого другого распространенного языка программирования. Эта такие свойства, как:

Все эти особенности описываются в этой статье.

Литералы

Литерал - это буквенно-цифровая (строковая), шестнадцатеричная или числовая константа. Строковая константа содержит один или больше символов определенного набора символов, заключенных между одинарными (' ') или двойными (" ") прямыми кавычками. (Константы предпочтительно заключать в одинарные кавычки, т.к. двойные кавычки используются во многих других случаях, как мы увидим вскоре.) Чтобы вставить одинарную кавычку в строку, заключенную в одинарные кавычки, нужно использовать две одинарные кавычки последовательно.

Шестнадцатеричные константы используются для представления непечатаемых символов и прочих двоичных данных. Они начинаются символами 0x, за которыми следует четное число буквенных или цифровых символов. В примерах ниже представлена иллюстрация некоторых допустимых и недопустимых строковых и шестнадцатеричных констант:

-- Допустимые строковые и шестнадцатеричные константы
'Санкт-Петербург'
"Простая строка"
'8910'
'Корректная строка с апострофом - I can''t'
0xCD1F

-- Недопустимые строковые константы

'AB'CD'             -- нечетное число одинарных кавычек
'Санкт-Петербург"   -- строка должна быть заключена в одинаковые кавычки, 
                    -- т. е. одинарные или двойные с каждого конца строки

К числовым константам относятся все целочисленные значения и значения с фиксированной и плавающей запятой (точкой). В примере ниже иллюстрируется несколько числовых констант:

160
-160.00
-0.2357E5     -- экспоненциальное представление, где nEm 
              -- означает n умножено на 10 в степени m
43.3E-4

Константы всегда обладают такими свойствами, как тип данных и длина, которые оба зависят от формата константы. Кроме этого, числовые константы имеют дополнительные свойства - точность и коэффициент масштабирования (scale factor).

Ограничители

В языке Transact-SQL двойные кавычки (") имеют два разных применения. Кроме применения для заключения строк, они также могут использоваться в качестве ограничителей для так называемых идентификаторов с ограничителями (delimited identifier). Идентификатор с ограничителями - это особый вид идентификатора, который обычно применяется для того, чтобы разрешить использование ключевых слов в качестве идентификаторов, а также разрешить использование пробелов в именах объектов баз данных.

Различие между одинарными и двойными кавычками было впервые введено в стандарте SQL92. Применительно к идентификаторам, этот стандарт различает между обычными идентификаторами и идентификаторами с ограничителями. Два ключевых отличия состоят в том, что идентификаторы с ограничителями заключаются в двойные кавычки и они чувствительны к регистру. (В языке Transact-SQL также поддерживается применение квадратных скобок вместо двойных кавычек.)

Двойные кавычки применяются только в качестве ограничителя строк. По большому счету, идентификаторы с ограничителями были введены для того, чтобы позволить определять идентификаторы, которые иначе идентичны зарезервированным ключевым словам. В частности, идентификаторы с ограничителями предотвращают использование имен (идентификаторов и имен переменных), которые могут быть введены в качестве зарезервированных ключевых слов в будущих стандартах SQL. Кроме этого, идентификаторы с ограничителями могут содержать символы, которые, как правило, не разрешаются в именах обычных идентификаторов, например, пробелы.

Применение двойных кавычек в языке Transact-SQL определяется с помощью параметра QUOTED_IDENTIFIRE инструкции SET. Если этому параметру присвоено значение on (значение по умолчанию), идентификаторы, заключенные в двойные кавычки, будут определяться как идентификаторы с ограничителями. В таком случае двойные кавычки нельзя будет применять для ограничения строк.

Комментарии

В языке Transact-SQL существует два способа определения комментариев. В первом, текст, заключенный между парами символов /* и */, является комментарием. Такой комментарий может занимать несколько строк. В другом способе два символа дефиса (--) указывают, что следующий за ними до конца текущей строки текст является комментарием. (Способ обозначения комментариев двумя дефисами отвечает стандарту ANSI SQL, а способ с помощью символов /* и */ является расширением языка Transact-SQL.)

/* 
    Многострочный
    комментарий
*/

-- Комментарий в одной строке

Идентификаторы

В языке Transact-SQL идентификаторы применяются для обозначения объектов баз данных, таких как собственно базы данных, их таблицы и индексы. Идентификатор состоит из строки длиной до 128 символов, которая может содержать буквы, цифры и символы _, @, # и &. Первым символом идентификатора должна быть буква или символ _, @ или #. Символ # в начале имени таблицы или хранимой процедуры обозначает временный объект, а символ @ обозначает переменную. Как упоминалось ранее, эти правила не относятся к идентификаторам с ограничителями (также называемыми идентификаторами в скобках), которые могут содержать или начинаться с любого символа, иного, чем сам ограничитель.

Зарезервированные ключевые слова

Каждый язык программирования имеет набор зарезервированных имен, которые требуется писать и применять в определенном формате. Такие имена называются зарезервированными ключевыми словами. В языке Transact-SQL используются разные виды таких имен, которые, как и во многих других языках программирования, нельзя применять в качестве имен объектов, за исключением, когда они используются для этой цели, как идентификаторы с ограничителями (или идентификаторы в скобках).

В языке Transact-SQL имена всех типов данных и системных функций, такие как CHARACTER и INTEGER, не являются зарезервированными ключевыми словами. Поэтому такие слова можно использовать для обозначения объектов. Тем не менее настоятельно рекомендуется не делать этого, т.к. такая практика влечет за собой трудности в чтении и понимании инструкций Transact-SQL.

Пройди тесты
Лучший чат для C# программистов