Основы языка Transact-SQL. Основные элементы Transact-SQL. Типы данных MS SQL Server. Выражения Transact-SQL, страница 7

  • Первый символ в идентификаторе должен:
  • Соответствовать стандарту Unicode Standard 2.0, определяющему, что этот символ - любой латинский символ (a-z, A-Z) или символ национального алфавита.
  • Быть знаком подчеркивания _, знаком @ или #. Некоторые символы в начале идентификатора имеют специальное значение: идентификаторы, начинающиеся со знаков: #, ##, @, обозначают соответственно временную таблицу (процедуру), глобальный временный объект, переменную.

104

Последующие символы в идентификаторе могут быть: символами, определяемыми стандартом Unicode Standard 2.0; десятичными цифрами; символами @, $, #. Нельзя использовать внутри идентификаторов специальные символы: ~ ! % ^ & - ( ) { } '' . \ пробел При выборе имени нужно убедиться, что оно не является зарезервированным словом, и что еще не существует объекта с таким именем (без учета регистра).

105

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

Каждый объект SQL Server создается определенным пользователем и принадлежит определенной БД, расположенной на конкретном сервере. Из имени объекта, владельца объекта, БД и сервера создается полное имя объекта, имеющее общий вид: [[[server.][database].]owner_name].]object_name При обращении к объекту обязательно указывать только имя самого объекта. Указание остальных частей зависит от конкретной ситуации.

107

Возможны следующие варианты обращения к объектам БД:

server.database.owner_name.object_name server.database..object_name server..owner_name.object_name server...object_name database.owner_name.object_name database..object_name owner_name.object_name object_name

108

Для ссылки на конкретный столбец таблицы или представления нужно указать в полном имени объекта пятый элемент – идентификатор столбца:

[[[server.][database]].[owner_name].] object_name.colum_name

Каждый объект SQL Server должен иметь уникальное полностью определенное имя. Например, в одной БД могут быть две таблицы с одинаковыми именами, но разными владельцами. Идентификаторы столбцов должны быть уникальны в пределах таблицы или представления. Для большинства ссылок на объекты характерны названия из трех частей с указанием имени текущего сервера.

109

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

linkedserver.catalog.schema.object_name

где linkedserver, catalog, schema – соответственно имена сервера, каталога, схемы, содержащих объект, упомянутый в распределенном запросе; object_name – имя объекта или таблицы. Формат имени хранимой процедуры удаленного сервера следующий:

server.database.owner_name.procedure

110

При создании объекта можно не указывать следующие части его имени: server – умолчание для локального сервера; database - умолчание для текущей БД; owner_name - умолчание для имени пользователя в указанной БД, связанной с идентификатором учетной записи текущего соединения.

111

Например, если пользователь зарегистрирован в БД Northwind как владелец (dbo), то создать таблицу с именем TableX можно одной из следующих двух команд:

CREATE TABLE TableX (col_1 INT PRIMARY KEY, col_2 NCHAR(3))

CREATE TABLE Northwind.dbo.TableX (col_1 INT PRIMARY KEY, col_2 NCHAR(3))

112

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

113

При обращении к объекту SQL Server использует для идентификации объектов следующие значения по умолчанию:

server - значение по умолчанию для локального сервера;

database - значение по умолчанию для текущей БД; owner_name - если имя владельца не указано явно, то сервер предполагает, что объект принадлежит текущему пользователю.

Если такого объекта не найдено, то предполагается, что данный объект принадлежит владельцу БД (dbo). Если же и такой объект не будет найден, то появится сообщение об ошибке и поиск прекратится.

114