Bài viết này trình bày cách sử dụng T-SQL để tạo một cột được tính toán trong SQL Server.
Một cột được tính toán là một cột ảo sử dụng một biểu thức để tính giá trị của nó. Biểu thức thường sẽ sử dụng dữ liệu từ các cột khác. Một cột được tính toán không được lưu trữ vật lý trong bảng trừ khi nó được đánh dấu PERSISTED
.
Ví dụ 1 - Tạo Bảng với Cột được Tính toán
Dưới đây là ví dụ về cách tạo bảng với một cột được tính toán, chèn dữ liệu, sau đó chọn nội dung của bảng.
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;
Kết quả:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+
Trong trường hợp này, cột cuối cùng là cột được tính toán. Nó nhân cột số lượng với cột giá cả. Điều này cho phép chúng tôi nhận được tổng giá trị của sản phẩm hiện có trong kho.
Ví dụ 2 - Tạo một cột được tính cố định
Bạn có thể tạo một cột được tính liên tục bằng cách thêm PERSISTED
lý lẽ. Điều này sẽ dẫn đến giá trị được tính toán được lưu trữ vật lý trong bảng. Nếu nó không được duy trì, thì giá trị được tính mỗi khi bạn đọc cột đã tính.
Đây là ví dụ mã tương tự như ví dụ trước, ngoại trừ lần này tôi tạo một cột được tính toán liên tục:
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
Sự khác biệt duy nhất là PERSISTED
đối số.
Ví dụ 3 - Cập nhật giá trị
Bây giờ nếu một giá trị được cập nhật trong Quantity
hoặc Price
, điều này sẽ ảnh hưởng đến tổng giá trị được trả về bởi cột được tính toán. Điều này sẽ xảy ra cho dù cột được duy trì hay không.
Ví dụ:nếu ai đó mua một cái búa, điều này sẽ ảnh hưởng đến tổng giá trị được trả về bởi cột được tính toán:
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Kết quả:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+