Partilhar via


tabela (Transact-SQL)

É um tipo de dados especial que pode ser usado para armazenar um conjunto de resultados para processamento posterior. table é utilizado principalmente para o armazenamento temporário de um conjunto de linhas retornadas como o conjunto de resultados de uma função com valor de tabela.

ObservaçãoObservação

Para declarar variáveis do tipo table, use DECLARE @local_variable.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe


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 ) 
     } 

Argumentos

  • table_type_definition
    É o mesmo subconjunto de informações usado para definir uma tabela em CREATE TABLE. A declaração de tabela inclui definições de coluna, nomes, tipos de dados e restrições. Os únicos tipos de restrição permitidos são PRIMARY KEY, UNIQUE KEY e NULL.

    Para obter mais informações sobre a sintaxe, consulte CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) e DECLARE @local\_variable (Transact-SQL).

  • collation_definition
    É o agrupamento da coluna composta de uma localidade do Microsoft Windows e um estilo de comparação, uma localidade do Windows e a notação binária ou um agrupamento do MicrosoftSQL Server. Se collation_definition não for especificado, a coluna herdará o agrupamento do banco de dados atual. Ou, se a coluna for definida como um tipo CLR (Common Language Runtime) definido pelo usuário, a coluna herdará o agrupamento do tipo definido pelo usuário.

Comentários

As funções e as variáveis podem ser declaradas como sendo do tipo table. As variáveis table podem ser usadas em funções, procedimentos armazenados e lotes.

Observação importanteImportante

As consultas que modificam variáveis table não geram planos de execução de consulta paralelos. O desempenho pode ser afetado quando variáveis table muito grandes ou variáveis table em consultas complexas são modificadas. Nessas situações, considere então o uso de tabelas temporárias. Para obter mais informações, consulte CREATE TABLE (Transact-SQL). As consultas que lêem variáveis table sem modificá-las ainda podem ser paralelizadas.

As variáveis table fornecem os seguintes benefícios:

  • Uma variável table se comporta como uma variável local. Ela tem um escopo bem definido. Ela é a função, o procedimento armazenado ou o lote em que está declarada.

    Dentro de seu escopo, uma variável table pode ser usada como uma tabela comum. Pode ser aplicada em qualquer lugar em que uma tabela ou expressão de tabela seja usada em instruções SELECT, INSERT, UPDATE e DELETE. Entretanto, table não pode ser usada na seguinte instrução:

    SELECT select_list INTO table_variable   
    

    As variáveis table são automaticamente limpas ao término da função, do procedimento armazenado ou do lote em que estão definidas.

  • Restrições CHECK, valores DEFAULT e colunas computadas na declaração do tipo table não podem chamar funções definidas pelo usuário.

  • As variáveis table usadas em procedimentos armazenados causam menos recompilações dos procedimentos armazenados do que quando são usadas tabelas temporárias.

  • As transações que envolvem variáveis table só existem durante uma atualização na variável table. Portanto, as variáveis table requerem menos recursos de log e bloqueio.

Não é possível criar índices explicitamente em variáveis table e nenhuma estatística é mantida em variáveis table. Em alguns casos, o desempenho pode melhorar com o uso de tabelas temporárias em seu lugar, as quais oferecem suporte a índices e estatísticas. Para obter mais informações sobre tabelas temporárias, consulte CREATE TABLE (Transact-SQL).

As variáveis table podem ser referenciadas por nome na cláusula FROM de um lote, como mostra o seguinte exemplo:

SELECT Employee_ID, Department_ID FROM @MyTableVar

Fora de uma cláusula FROM, as variáveis table devem ser referenciadas usando-se um alias, como mostra o seguinte exemplo:

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

Não há suporte para a operação de atribuição entre variáveis table. Além disso, como as variáveis table têm escopo limitado e não fazem parte do banco de dados persistente, elas não são afetadas por reversões de transações.