Compartilhar via


computed_column_definition (Transact-SQL)

Especifica as propriedades de uma coluna computada que são adicionadas a uma tabela usando ALTER TABLE.

Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[ 
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [ WITH FILLFACTOR = fillfactor ]
        [ WITH ( <index_option> [, ...n ] ) ]
        [ ON { partition_scheme_name ( partition_column_name ) | filegroup 
            | "default" } ]
    | [ FOREIGN KEY ] 
        REFERENCES ref_table [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]

Argumentos

  • column_name
    É o nome da coluna a ser alterada, adicionada ou removida. column_name pode ter 1 a 128 caracteres. Para novas colunas, column_name pode ser omitido para colunas criadas com um tipo de dados timestamp. Se nenhum column_name for especificado para uma coluna de tipo de dados timestamp, o nome timestamp será usado.

  • computed_column_expression
    É uma expressão que define o valor de uma coluna computada. Uma coluna computada é uma coluna virtual que não está fisicamente armazenada na tabela, mas é computada a partir de uma expressão que usa outras colunas da mesma tabela. Por exemplo, uma coluna computada poderia ter a definição: cost AS price * qty. A expressão pode ser o nome de uma coluna não computada, constante, função, variável e qualquer combinação dessas, conectada por um ou mais operadores. A expressão não pode ser uma subconsulta ou incluir um tipo de dados de alias.

    As colunas computadas podem ser usadas em listas de seleção, cláusulas WHERE, cláusulas ORDER BY, ou qualquer outro local no qual expressões regulares podem ser usadas, mas com as seguintes exceções:

    • Uma coluna computada não pode ser usada como uma definição de restrição DEFAULT ou FOREIGN KEY ou com uma definição de restrição NOT NULL. Entretanto, se o valor da coluna computada for definido por uma expressão determinística e o tipo de dados do resultado for permitido em colunas de índice, uma coluna computada poderá ser usada como uma coluna de chave em um índice ou como parte de qualquer restrição PRIMARY KEY ou UNIQUE.

      Por exemplo, se a tabela tiver colunas de inteiros a e b, a coluna computada a + b poderá ser indexada, mas a coluna computada a + DATEPART(dd, GETDATE()) não poderá ser indexada, pois o valor pode ser alterado em invocações subsequentes.

    • Uma coluna computada não pode ser o destino de uma instrução INSERT ou UPDATE.

      Dica

      Como cada linha de uma tabela pode ter valores diferentes para as colunas envolvidas em uma coluna computada, a coluna computada poderá não ter o mesmo resultado para cada linha.

  • PERSISTED
    Especifica que o Mecanismo de Banco de Dados armazenará fisicamente os valores computados na tabela e atualizará os valores quando for atualizada qualquer outra coluna da qual a coluna computada depende. Marcar uma coluna computada como PERSISTED permite que um índice seja criado em uma coluna computada que é determinística, mas não precisa. Para obter mais informações, consulte Índices em colunas computadas. Qualquer coluna computada usada como coluna de particionamento de uma tabela particionada deve ser marcada explicitamente PERSISTED. computed_column_expression deve ser determinístico quando PERSISTED é especificado.

  • NULL | NOT NULL
    Especifica se são permitidos valores nulos na coluna. NULL não é estritamente uma restrição, mas pode ser especificado como NOT NULL. NOT NULL poderá ser especificado para colunas computadas somente se PERSISTED também for especificado.

  • CONSTRAINT
    Especifica o início da definição de uma restrição PRIMARY KEY ou UNIQUE.

  • constraint_name
    É a nova restrição. Os nomes de restrição devem seguir as regras para identificadores, com exceção de que o nome não pode começar com um sinal numérico (#). Se o constraint_name não for fornecido, um nome gerado pelo sistema será atribuído à restrição.

  • PRIMARY KEY
    É uma restrição que impõe a integridade de entidade para uma coluna ou colunas especificadas usando um índice exclusivo. Somente uma restrição PRIMARY KEY pode ser criada para cada tabela.

  • UNIQUE
    É uma restrição que fornece a integridade de entidade para uma coluna ou colunas específicas usando um índice exclusivo.

  • CLUSTERED | NONCLUSTERED
    Especifica que um índice clusterizado ou não clusterizado é criado para a restrição PRIMARY KEY ou UNIQUE. As restrições PRIMARY KEY usam como padrão CLUSTERED. As restrições UNIQUE usam como padrão NONCLUSTERED.

    Se uma restrição ou índice clusterizado já existir em uma tabela, CLUSTERED não poderá ser especificado. Se uma restrição ou índice em cluster já existir em uma tabela, as restrições PRIMARY KEY usam como padrão NONCLUSTERED.

  • WITH FILLFACTOR =fillfactor
    Especifica o quanto o Mecanismo de Banco de Dados do SQL Server deve preencher cada página de índice usada para armazenar os dados de índice. Os valores fillfactor especificados pelo usuário podem ser de 1 a 100. Se um valor não for especificado, o padrão será 0.

    Importante

    A documentação de WITH FILLFACTOR = fillfactor como a única opção de índice aplicável às restrições PRIMARY KEY ou UNIQUE é mantida para fins de compatibilidade com versões anteriores, mas isso não será documentado dessa maneira em futuras versões.Podem ser especificadas outras opções de índice na cláusula index_option (Transact-SQL) de ALTER TABLE.

  • FOREIGN KEY REFERENCES
    É uma restrição que fornece integridade referencial para os dados na coluna ou colunas. As restrições FOREIGN KEY requerem que cada valor na coluna exista na coluna ou colunas referenciadas correspondentes na tabela referenciada. As restrições FOREIGN KEY podem fazer referência somente a colunas que sejam restrições PRIMARY KEY ou UNIQUE na tabela ou colunas referenciadas em um UNIQUE INDEX na tabela referenciada. As chaves estrangeiras em colunas computadas também devem ser marcadas como PERSISTED.

  • ref_table
    É o nome da tabela referenciada pela restrição FOREIGN KEY.

  • (ref_column )
    É uma coluna da tabela referenciada pela restrição FOREIGN KEY.

  • ON DELETE { NO ACTION | CASCADE }
    Especifica a ação que acontece nas linhas da tabela, se essas linhas tiverem uma relação referencial e a linha referenciada for excluída da tabela pai. O padrão é NO ACTION.

    • NO ACTION
      O Mecanismo de Banco de Dados gera um erro e a ação de exclusão na linha da tabela pai é revertida.

    • CASCADE
      As linhas correspondentes serão excluídas da tabela de referência se aquela linha for excluída da tabela pai.

    Por exemplo, no banco de dados do AdventureWorks2012 , a tabela ProductVendor tem uma relação referencial com a tabela Vendor. A chave estrangeira ProductVendor.BusinessEntityID referencia a chave primária Vendor.BusinessEntityID.

    Se uma instrução DELETE for executada em uma linha da tabela Vendor e uma ação ON DELETE CASCADE for especificada para ProductVendor.BusinessEntityID, o Mecanismo de Banco de Dados verificará se há uma ou mais linhas dependentes na tabela ProductVendor. Se existir alguma, as linhas dependentes na tabela ProductVendor serão excluídas, além da linha referenciada na tabela Vendor.

    Entretanto, se NO ACTION for especificada, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de exclusão da linha Vendor quando houver pelo menos uma linha da tabela ProductVendor que a referencie.

    Não especifique CASCADE se a tabela for incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Agrupar alterações a linhas relacionadas com registros lógicos.

  • ON UPDATE { NO ACTION }
    Especifica a ação que acontece nas linhas da tabela criada, quando essas linhas têm uma relação referencial e a linha referenciada for atualizada na tabela pai. Quando NO ACTION for especificada, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de atualização da linha Vendor se houver pelo menos uma linha da tabela ProductVendor que a referencie.

  • NOT FOR REPLICATION

    Aplica-se a: SQL Server 2008 a SQL Server 2014.

    Pode ser especificado para restrições FOREIGN KEY e instruções CHECK. Se essa cláusula for especificada para uma restrição, ela não será aplicada quando os agentes de replicação executarem operações insert, update ou delete.

  • CHECK
    É uma restrição que impõe a integridade de domínio limitando os possíveis valores que podem ser inseridos em uma ou mais colunas. As restrições CHECK em colunas computadas também devem ser marcadas como PERSISTED.

  • logical_expression
    É uma expressão lógica que retorna TRUE ou FALSE. A expressão não pode conter uma referência a um tipo de dados de alias.

  • ON { partition_scheme_name(partition_column_name) | filegroup| "default"}

    Aplica-se a: SQL Server 2008 a SQL Server 2014.

    Especifica o local de armazenamento do índice criado para a restrição. Se partition_scheme_name for especificado, o índice é particionado e as partições são mapeadas para os grupos de arquivos que são especificados por partition_scheme_name. Se filegroup for especificado, o índice será criado no grupo de arquivos nomeado. Se "default" for especificado ou se ON não for especificado, o índice será criado no mesmo grupo de arquivos que a tabela. Se ON for especificado quando um índice em cluster for adicionado a uma restrição PRIMARY KEY ou UNIQUE, a tabela inteira será movida para o grupo de arquivos especificado quando o índice em cluster for criado.

    Dica

    Nesse contexto, default não é uma palavra-chave.É um identificador para o grupo de arquivos padrão e deve ser delimitado, como em ON "default" ou ON [default].Se "default" for especificado, a opção QUOTED_IDENTIFIER deverá ser ON para a sessão atual.Essa é a configuração padrão.Para obter mais informações, consulte SET QUOTED_IDENTIFIER (Transact-SQL).

Comentários

Cada restrição PRIMARY KEY e UNIQUE gera um índice. O número de restrições UNIQUE e PRIMARY KEY não pode fazer com que o número de índices na tabela exceda 999 índices não cluster e 1 índice em cluster.

Consulte também

Referência

ALTER TABLE (Transact-SQL)