Partilhar via


Especificar colunas computadas em uma tabela

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco de dados SQL no Microsoft Fabric

Uma coluna computada é uma coluna virtual que não está fisicamente armazenada na tabela, a menos que a coluna esteja marcada PERSISTED. Uma expressão de coluna computada pode usar dados de outras colunas para calcular um valor para a coluna à qual pertence. Você pode especificar uma expressão para uma coluna computada no SQL Server usando o SQL Server Management Studio (SSMS) ou o Transact-SQL (T-SQL).

Limitaçõ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. No entanto, 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 chave em um índice ou como parte de qualquer restrição de PRIMARY KEY ou UNIQUE.

    Por exemplo, se a tabela tiver colunas inteiras a e b, uma coluna computada definida como a + b pode ser indexada, mas a coluna computada definida como a + DATEPART(dd, GETDATE()) não pode ser indexada, porque o valor pode mudar em invocações subsequentes.

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

  • SET QUOTED_IDENTIFIER deve ser ON quando você estiver criando ou alterando índices em colunas computadas ou exibições indexadas. Para obter mais informações, consulte SET QUOTED_IDENTIFIER (Transact-SQL).

Permissões

Requer permissões ALTER na tabela.

Utilizar o SQL Server Management Studio

Adicionar uma nova coluna computada

  1. No Pesquisador de Objetos , expanda a tabela à qual você deseja adicionar a nova coluna computada. Clique com o botão direito do rato em Colunas e selecione Nova Coluna.

  2. Digite o nome da coluna e aceite o tipo de dados padrão (nchar(10)). O Mecanismo de Banco de Dados determina o tipo de dados da coluna computada aplicando as regras de precedência do tipo de dados às expressões especificadas na fórmula. Por exemplo, se a fórmula fizer referência a uma coluna do tipo dinheiro e a uma coluna do tipo int, a coluna calculada será do tipo dinheiro porque esse tipo de dados tem a precedência mais alta. Para obter mais informações, consulte Precedência de Tipos de Dados (Transact-SQL).

  3. No separador Propriedades da Coluna, expanda a propriedade Especificação da Coluna Computada.

  4. Na propriedade filho (Fórmula), insira a expressão para esta coluna na célula da grelha à direita. Por exemplo, em uma coluna SalesTotal, a fórmula inserida pode ser SubTotal+TaxAmt+Freight, que adiciona o valor nessas colunas para cada linha da tabela.

    Importante

    Quando uma fórmula combina duas expressões de tipos de dados diferentes, as regras de precedência do tipo de dados especificam que o tipo de dados com a precedência inferior é convertido para o tipo de dados com a precedência mais alta. Se a conversão não for uma conversão implícita suportada, a Error validating the formula for column column_name. de erro será retornada. Use a função CAST ou CONVERT para resolver o conflito de tipo de dados. Por exemplo, se uma coluna do tipo nvarchar for combinada com uma coluna do tipo int, o tipo inteiro deverá ser convertido em nvarchar, conforme mostrado nesta fórmula ('Prod'+CONVERT(nvarchar(23),ProductID)). Para obter mais informações, consulte CAST e CONVERT (Transact-SQL).

  5. Indique se os dados são persistidos escolhendo Sim ou Não no menu suspenso para a propriedade filho Is Persisted.

  6. No menu Arquivo, selecione Salvarnome da tabela.

Adicionar uma definição de coluna computada a uma coluna existente

  1. No Pesquisador de Objetos , clique com o botão direito do mouse na tabela com a coluna que você deseja alterar e expanda a pasta Colunas.
  2. Clique com o botão direito do rato na coluna para a qual pretende especificar uma fórmula de coluna calculada e selecione Eliminar. Selecione OK.
  3. Adicione uma nova coluna e especifique a fórmula de coluna computada seguindo o procedimento anterior para adicionar uma nova coluna computada.

Use Transact-SQL

Adicionar uma coluna computada ao criar uma tabela

O exemplo a seguir cria uma tabela com uma coluna computada que multiplica o valor na coluna QtyAvailable vezes o valor na coluna UnitPrice.

CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    );

-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5);

-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

-- Update values in the table.
UPDATE dbo.Products 
SET UnitPrice = 2.5
WHERE ProductID = 1;

-- Display the rows in the table, and the new values for UnitPrice and InventoryValue.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

Adicionar uma nova coluna computada a uma tabela existente

O exemplo a seguir adiciona uma nova coluna à tabela criada no exemplo anterior.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

Opcionalmente, adicione o argumento PERSISTED para armazenar fisicamente os valores computados na tabela:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;

Alterar uma coluna existente para uma coluna computada

O exemplo a seguir modifica a coluna adicionada no exemplo anterior.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO