table (Transact-SQL)
Особый тип данных, который можно использовать для хранения результирующего набора с целью последующей его обработки. Тип table применяется, главным образом, для временного хранения набора строк, возвращаемого в качестве результирующего набора возвращающей табличное значение функции.
Примечание |
---|
Для объявления переменных типа table используйте инструкцию DECLARE @local_variable. |
Синтаксис
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 имеют ограниченную область применения и не являются частью постоянных баз данных, они не изменяются в случае откатов транзакций.