Este artigo demonstra como usar o T-SQL para criar uma coluna computada no SQL Server.
Uma coluna calculada é uma coluna virtual que usa uma expressão para calcular seu valor. A expressão normalmente usará dados de outras colunas. Uma coluna computada não é armazenada fisicamente na tabela, a menos que esteja marcada como
PERSISTED
. Exemplo 1 – Criar uma tabela com uma coluna computada
Aqui está um exemplo de criação de uma tabela com uma coluna computada, inserção de dados e seleção do conteúdo da tabela.
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price ); INSERT INTO Products (ProductName, Quantity, Price) VALUES ('Hammer', 5, 10), ('Corkscrew', 2, 7.50), ('Kettle', 3, 25.15); SELECT * FROM Products;
Resultado:
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 5 | 10.0000 | 50.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+
Nesse caso, a última coluna é uma coluna computada. Ele multiplica a coluna de quantidade pela coluna de preço. Isso nos permite obter um valor total do produto atualmente em estoque.
Exemplo 2 – Criar uma coluna computada persistente
Você pode criar uma coluna computada persistente adicionando o
PERSISTED
argumento. Isso fará com que o valor calculado seja fisicamente armazenado na tabela. Se não persistir, o valor será calculado toda vez que você ler a coluna computada. Aqui está o mesmo exemplo de código que o anterior, exceto que desta vez eu crio uma coluna computada persistente:
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
A única diferença é o
PERSISTED
argumento. Exemplo 3 – Atualizar um valor
Agora, se um valor for atualizado no
Quantity
ou Price
colunas, isso afetará o valor total retornado pela coluna calculada. Isso ocorrerá se a coluna for persistente ou não. Se alguém comprar um martelo, por exemplo, isso afetará o valor total retornado pela coluna computada:
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Resultado:
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 4 | 10.0000 | 40.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+