Поделиться через


table (Transact-SQL)

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

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

Для объявления переменных типа table используйте инструкцию DECLARE @local_variable.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис


table_type_definition ::= 
    TABLE ( { column_definition | table_constraint } [ ,...n ] ) 

column_definition ::= 
        column_name scalar_data_type 
    [ COLLATE collation_definition ] 
    [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] 
    [ ROWGUIDCOL ] 
    [ column_constraint ] [ ...n ] 

column_constraint ::= 
    { [ NULL | NOT NULL ] 
    | [ PRIMARY KEY | UNIQUE ] 
    | CHECK ( logical_expression ) 
    } 

table_constraint ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )
     | CHECK ( logical_expression ) 
     } 

Аргументы

  • table_type_definition
    То же подмножество данных, которое используется для определения таблицы с помощью инструкции CREATE TABLE. Объявление таблицы включает определения столбцов, имен, типов данных и ограничений. К допустимым типам ограничений относятся только PRIMARY KEY, UNIQUE KEY и NULL.

    Дополнительные сведения о синтаксисе см. в разделах Инструкция CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) и DECLARE @local\_variable (Transact-SQL).

  • collation_definition
    Параметры сортировки столбцов, состоящие из поддерживаемых настроек языковых стандартов Microsoft Windows и стиля сопоставления, настроек языковых стандартов Windows и представления чисел в двоичной системе счисления или сортировки MicrosoftSQL Server. Если значение аргумента collation_definition не установлено, столбец унаследует параметры сортировки текущей базы данных. Или, если столбец определен как имеющий определяемый пользователем тип среды CLR, он унаследует параметры сортировки этого пользовательского типа.

Замечания

Функции и переменные могут быть объявлены как переменные типа table. Переменные table могут использоваться в функциях, хранимых процедурах и в пакетах.

Важное примечаниеВажно!

Запросы, изменяющие переменные table, не создают параллельных планов выполнения запроса. При изменении очень больших переменных table или переменных table в сложных запросах, может снизиться производительность. В подобных случаях целесообразно рассмотреть возможность использования временных таблиц. Дополнительные сведения см. в разделе Инструкция CREATE TABLE (Transact-SQL). Запросы, которые считывают переменные table, не изменяя их, могут выполняться параллельно.

Использование переменных table дает следующие преимущества.

  • Переменная table ведет себя как локальная переменная. Она имеет точно определенную область применения. Это функция, хранимая процедура или пакет, в котором она объявлена.

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

    SELECT select_list INTO table_variable   
    

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

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

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

  • Транзакции с использованием переменных table продолжаются только во время процесса обновления соответствующей переменной table. Поэтому переменные table реже подвергаются блокировке и требуют меньших ресурсов для ведения журналов регистрации.

На переменных table нельзя создавать индексы и статистику. В некоторых случаях можно добиться повышения производительности за счет использования вместо табличных переменных временных таблиц, которые позволяют создавать индексы и вести статистический учет. Дополнительные сведения о временных таблицах см. в разделе Инструкция CREATE TABLE (Transact-SQL).

На переменные table можно ссылаться по имени в пакетном предложении FROM, как показано в следующем примере:

SELECT Employee_ID, Department_ID FROM @MyTableVar

Вне предложения FROM на переменные table нужно ссылаться по псевдонимам, как показано в следующем примере:

SELECT EmployeeID, DepartmentID 
FROM @MyTableVar m
JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND
   m.DepartmentID = Employee.DepartmentID)

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