Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criar uma coluna computada no SQL Server usando T-SQL


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      |
+-------------+---------------+------------+---------+--------------+