Определяемые пользователем типы таблиц

В SQL Server 2008 определяемый пользователем табличный тип — это тип, представляющий собой определение структуры таблицы. Определяемый пользователем табличный тип можно использовать для того, чтобы объявить возвращающие табличное значение параметры для хранимых процедур или функций, либо для того, чтобы объявить переменные таблицы, которые будут использоваться в пакете или в теле хранимой процедуры или функции. Дополнительные сведения о задании структуры таблицы см. в разделе Инструкция CREATE TABLE (Transact-SQL).

Для создания определяемого пользователем табличного типа используется инструкция CREATE TYPE. Чтобы гарантировать то, что данные в определяемом пользователем табличном типе отвечают определенным требованиям, можно создать для него ограничения уникальности и первичные ключи.

Сведения о представлениях каталога, связанных с определяемыми пользователем типами, см. в представлениях sys.types и sys.table_types.

Ограничения

Определяемые пользователем табличные типы имеют следующие ограничения.

  • Определяемый пользователем табличный тип не может быть использован как столбец в таблице или как поле в структурированном, определяемом пользователем типе.

  • Псевдонимы типов основаны на определяемом пользователем табличном типе.

  • Параметр [NOT FOR REPLICATION] не допускается.

  • Для ограничений CHECK необходима материализация вычисляемого столбца.

  • Первичный ключ у вычисляемых столбцов должен быть помечен как PERSISTED и не должен иметь значение NULL.

  • Некластеризованный индекс не может быть создан в определяемом пользователем табличном типе, за исключением тех случаев, когда индекс является результатом создания ограничения PRIMARY KEY или UNIQUE в определяемом пользователем типе таблицы. (SQL Server обеспечивает принудительное выполнение ограничений UNIQUE или PRIMARY KEY с помощью индекса.)

  • После того как определяемый пользователем табличный тип был создан, его нельзя изменять.

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

безопасность

Разрешения для определяемых пользователем табличных типов подчиняются модели безопасности объектов SQL Server, используя следующие ключевые слова Transact-SQL: CREATE, GRANT, DENY, ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE, VIEW DEFINITION и REVOKE.

ПримечаниеПримечание

Наличие разрешения CONTROL для типа таблицы подразумевает наличие всех остальных разрешений для типа таблицы.

Привязка к схеме устанавливается, когда в функции, в которой существует инструкция DECLARE, указывается WITH SCHEMABINDING. Разрешение REFERENCES требуется для определяемого пользователем табличного типа, когда тип таблицы является параметром в процедуре или если имеется предложение SCHEMABINDING. Во всех других случаях привязка к схеме не устанавливается и для определяемого пользователем табличного типа не требуется разрешения REFERENCES.

Для объявления табличной переменной, использующей определяемый пользователем табличный тип, требуется наличие разрешения EXECUTE для этого определяемого пользователем типа таблицы.

ПримечаниеПримечание

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

Примеры

А. Создание определяемого пользователем табличного типа

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

USE AdventureWorks;
GO

/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50)
, CostRate INT );
GO

Б. Отмена разрешений для определяемого пользователем табличного типа

В следующем примере показывается отмена разрешений для конкретного, определяемого пользователем табличного типа. Разрешение REFERENCES отменяется у пользователя с именем JoAnna для определяемого пользователем табличного типа CustomerListType, который находится внутри реляционной схемы mySchema в базе данных myDatabase.

USE myDatabase
GO
REVOKE REFERENCES ON TYPE::[mySchema].[CustomerListType] FROM JoAnna
GO

Журнал изменений

Обновленное содержимое

Из раздела «Ограничения» удалена следующая инструкция: «Значение DEFAULT не может быть задано в определении определяемого пользователем табличного типа».