Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode definir índices em colunas computadas desde que os seguintes requisitos sejam atendidos:
Requisitos de propriedade
Requisitos de determinismo
Requisitos de precisão
Requisitos de tipo de dados
Requisitos de opção SET
Requisitos de propriedade
Todas as referências de função na coluna computada devem ter o mesmo proprietário que a tabela.
Requisitos de determinismo
Importante
As expressões serão determinísticas se sempre retornarem o mesmo resultado para um conjunto de entradas especificado. A propriedade IsDeterministic da função COLUMNPROPERTY relata se um computed_column_expression é determinístico.
O computed_column_expression deve ser determinístico. Uma computed_column_expression é determinística quando uma ou mais das seguintes opções são verdadeiras:
Todas as funções referenciadas pela expressão são determinísticas e precisas. Essas funções incluem funções internas e definidas pelo usuário. Para obter mais informações, veja Funções determinísticas e não determinísticas. As funções podem ser imprecisas se a coluna calculada for marcada como PERSISTED. Para obter mais informações, consulte Criando índices em colunas computadas persistentes mais adiante neste tópico.
Todas as colunas referenciadas na expressão vêm da tabela que contém a coluna computada.
Nenhuma referência de coluna extrai dados de várias linhas. Por exemplo, funções de agregação, como SOMA ou AVG, dependem de dados de várias linhas e tornariam um computed_column_expression não determinístico.
O computed_column_expression não tem acesso a dados do sistema nem acesso a dados do usuário.
Qualquer coluna computada que contenha uma expressão CLR (Common Language Runtime) deve ser determinística e marcada como PERSISTED antes que a coluna possa ser indexada. Expressões de tipo clr definidas pelo usuário são permitidas em definições de coluna computada. Colunas computadas cujo tipo é um tipo clr definido pelo usuário podem ser indexadas desde que o tipo seja comparável. Para obter mais informações, veja Tipos CLR definidos pelo usuário.
Observação
Quando você se refere a literais de cadeia de caracteres do tipo de dados de data em colunas computadas indexadas no SQL Server, recomendamos converter explicitamente o literal para o tipo de data desejado usando um estilo de formato de data determinística. Para obter uma lista dos estilos de formato de data que são determinísticos, consulte CAST e CONVERT. Expressões que envolvem a conversão implícita de cadeias de caracteres em tipos de dados de data são consideradas não determinísticas, a menos que o nível de compatibilidade do banco de dados seja definido como 80 ou anterior. Isso ocorre porque os resultados dependem das configurações LANGUAGE e DATEFORMAT da sessão do servidor. Por exemplo, os resultados da expressão CONVERT (datetime, '30 listopad 1996', 113) dependem da configuração LANGUAGE porque a cadeia de caracteres '30 listopad 1996' significa meses diferentes em idiomas diferentes. Da mesma forma, na expressão DATEADD(mm,3,'2000-12-01'), o Mecanismo de Banco de Dados interpreta a cadeia '2000-12-01' de caracteres com base na configuração DATEFORMAT.
A conversão implícita de dados de caractere não Unicode entre ordenações também é considerada não determinística, a menos que o nível de compatibilidade seja definido como 80 ou anterior.
Quando a configuração do nível de compatibilidade do banco de dados for 90, você não poderá criar índices em colunas computadas que contenham essas expressões. No entanto, as colunas computadas existentes que contêm essas expressões de um banco de dados atualizado podem ser mantidas. Se você usar colunas computadas indexadas que contêm conversões de cadeia de caracteres implícitas em data, para evitar possíveis corrupções de índice, verifique se as configurações LANGUAGE e DATEFORMAT são consistentes em seus bancos de dados e aplicativos.
Requisitos de precisão
O computed_column_expression deve ser preciso. Um computed_column_expression é preciso quando um ou mais dos seguintes procedimentos são verdadeiros:
Não é uma expressão dos
floattipos de dados ourealde dados.Ele não usa um tipo de dados
floatourealem sua definição. Por exemplo, na instrução a seguir, a colunayéinte determinística, mas imprecisa.CREATE TABLE t2 (a int, b int, c int, x float, y AS CASE x WHEN 0 THEN a WHEN 1 THEN b ELSE c END);
Observação
Qualquer expressão float ou expressão real é considerada imprecisa e não pode ser uma chave de um índice; uma expressão float ou expressão real pode ser usada em uma exibição indexada, mas não como uma chave. Isso também é verdadeiro para colunas computadas. Qualquer função, expressão ou função definida pelo usuário será considerada imprecisa se contiver alguma float ou real expressão. Isso inclui comparações lógicas.
A propriedade IsPrecise da função COLUMNPROPERTY informa se um computed_column_expression é preciso.
Requisitos de tipo de dados
A computed_column_expression definida para a coluna computada não pode ser avaliada para os tipos de dados
text,ntextouimage.As colunas calculadas derivadas dos tipos de dados
image,ntext,text,varchar(max),nvarchar(max),varbinary(max)exmlpodem ser indexadas, desde que o tipo de dado da coluna calculada seja permitido como uma coluna-chave de índice.Colunas computadas derivadas de
image,ntextetexttipos de dados podem ser colunas não chave (incluídas) em um índice não clusterizado, desde que o tipo de dados de coluna computada seja permitido como uma coluna de índice não chave.
Requisitos de opção SET
A opção de nível de conexão ANSI_NULLS deve ser definida como ON quando a instrução CREATE TABLE ou ALTER TABLE que define a coluna computada for executada. A função OBJECTPROPERTY relata se a opção está ativada por meio da propriedade IsAnsiNullsOn .
A conexão na qual o índice é criado e todas as conexões que tentam instruções INSERT, UPDATE ou DELETE que alterarão valores no índice devem ter seis opções SET definidas como ON e uma opção definida como OFF. O otimizador ignora um índice em uma coluna computada para qualquer instrução SELECT executada por uma conexão que não tenha essas mesmas configurações de opção.
A opção NUMERIC_ROUNDABORT deve ser definida como OFF e as seguintes opções devem ser definidas como ON:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS (Configurações de aviso ANSI no SQL Server)
ARITHABORT
CONCAT_NULL_YIELDS_NULL é uma configuração do SQL Server que determina que a concatenação envolvendo valores NULL resultará em NULL.
IDENTIFICADOR_COM_COTAS
A definição de ANSI_WARNINGS como ON definirá ARITHABORT implicitamente como ON quando o nível de compatibilidade do banco de dados estiver definido como 90 ou mais.
Criando índices em colunas computadas persistentes
Você pode criar um índice em uma coluna computada definida com uma expressão determinística, mas imprecisa, se a coluna estiver marcada como PERSISTED na instrução CREATE TABLE ou ALTER TABLE. Isso significa que o Mecanismo de Banco de Dados usa esses valores persistentes quando cria um índice na coluna e quando o índice é referenciado em uma consulta. Essa opção permite que você crie um índice em uma coluna computada quando o .NET Framework é determinístico e preciso.