Tipos de tabela definidos pelo usuário

Em SQL Server 2008, um tipo de tabela definido pelo usuário é um tipo definido pelo usuário que representa a definição de uma estrutura de tabela. Você pode usar um tipo de tabela definido pelo usuário para declarar os parâmetros com valor de tabela para os procedimentos armazenados ou funções, ou para declarar variáveis de tabelas que deseja usar em um lote ou no corpo de um procedimento armazenado ou função. Para obter mais informações sobre como definir uma estrutura de tabela, consulte CREATE TABLE (Transact-SQL).

Para criar um tipo de tabela definido pelo usuário, use a instrução CREATE TYPE. Para assegurar que os dados de um tipo de tabela definido pelo usuário atendam aos requisitos específicos, você pode criar restrições exclusivas ou chaves primárias no tipo de tabela definido pelo usuário.

Para obter informações sobre as exibições de catálogo associadas com os tipos definidos pelo usuário, consulte sys.types e sys.table_types.

Restrições

Os tipos de tabela definidos pelo usuário têm as seguintes restrições:

  • Um tipo de tabela definido pelo usuário não pode ser usado como uma coluna em uma tabela ou um campo em um tipo estruturado definido pelo usuário.

  • Tipos de alias baseados em um tipo de tabela definido pelo usuário

  • A opção [NOT FOR REPLICATION] não é permitida.

  • Para persistirem, as restrições CHECK exigem uma coluna computada.

  • A chave primária em colunas computadas deve ser PERSISTED e NOT NULL.

  • Um índice não clusterizado não pode ser criado em um tipo de tabela definido pelo usuário, a menos que o índice seja o resultado da criação de uma restrição PRIMARY KEY ou UNIQUE em um tipo de tabela definido pelo usuário. (SQL Server impõe qualquer restrição UNIQUE ou PRIMARY KEY usando um índice.)

  • A definição de tipo de tabela definido pelo usuário não pode ser modificada após ter sido criada.

  • As funções definidas pelo usuário não podem ser chamadas nas definições das colunas computadas de um tipo de tabela definido pelo usuário.

Segurança

As permissões para os tipos de tabela definidos pelo usuário seguem o modelo de segurança do objeto para SQL Server, usando as seguintes palavras-chave Transact-SQL: CREATE, GRANT, DENY, ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE, VIEW DEFINITION, e REVOKE.

ObservaçãoObservação

A permissão CONTROL em um tipo de tabela implica em todas as outras permissões do tipo de tabela.

Uma associação de esquema é estabelecida quando a função na qual a instrução DECLARE ocorre, especifica WITH SCHEMABINDING. A permissão REFERENCES é exigida no tipo de tabela definido pelo usuário quando o tipo de tabela é um parâmetro em uma rotina ou quando se especifica SCHEMABINDING. Em todos os outros casos, nenhuma associação de esquema é estabelecida e a permissão REFERENCES não é exigida no tipo de tabela definido pelo usuário.

Para declarar uma variável de tabela que usa um tipo de tabela definido pelo usuário, a permissão EXECUTE é exigida no tipo de tabela definido pelo usuário.

ObservaçãoObservação

A opção CASCADE não é imposta para as permissões do tipo de tabela definida pelo usuário porque um tipo de tabela definido pelo usuário não pode inserir nenhum tipo de definição.

Exemplos

A. Criando um tipo de tabela definido pelo usuário

O exemplo a seguir mostra como criar um tipo de tabela definido pelo usuário.

USE AdventureWorks2008R2;
GO

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

B. Revogando permissões em um tipo de tabela definido pelo usuário

O exemplo a seguir mostra como as permissões podem ser revogadas em um tipo específico de tabela definido pelo usuário. A permissão REFERENCES é revogada de um usuário denominado JoAnna em um tipo de tabela definido pelo usuário CustomerListType que está em um esquema relacional mySchema no banco de dados myDatabase.

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