Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo một cột được tính toán trong SQL Server bằng T-SQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi kiểu dữ liệu cột trong cơ sở dữ liệu SQL mà không làm mất dữ liệu

  2. Làm cách nào để chuyển đổi DateTimeOffset của Sql Server 2008 thành DateTime

  3. Định cấu hình công việc SQL trong SQL Server bằng T-SQL

  4. Các ký tự thoát khỏi tìm kiếm toàn văn bản trong SQL Server?

  5. Truy vấn trả về danh sách phân cấp các loại sự kiện kích hoạt trong SQL Server