Especificar colunas computadas em uma tabela
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
banco 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
ouFOREIGN KEY
, ou com uma definição de restriçãoNOT 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 dePRIMARY KEY
ouUNIQUE
.Por exemplo, se a tabela tiver colunas inteiras
a
eb
, uma coluna computada definida comoa + b
pode ser indexada, mas a coluna computada definida comoa + 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 serON
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
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.
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).
No separador Propriedades da Coluna, expanda a propriedade Especificação da Coluna Computada.
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 serSubTotal+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çãoCAST
ouCONVERT
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).Indique se os dados são persistidos escolhendo Sim ou Não no menu suspenso para a propriedade filho Is Persisted.
No menu Arquivo, selecione Salvarnome da tabela.
Adicionar uma definição de coluna computada a uma coluna existente
- 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.
- 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.
- 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