Bagikan melalui


Menentukan kolom komputasi dalam tabel

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Kolom komputasi adalah kolom virtual yang tidak disimpan secara fisik dalam tabel, kecuali kolom ditandai PERSISTED. Ekspresi kolom komputasi dapat menggunakan data dari kolom lain untuk menghitung nilai kolom tempat kolom tersebut berada. Anda dapat menentukan ekspresi untuk kolom komputasi di SQL Server dengan menggunakan SQL Server Management Studio (SSMS) atau Transact-SQL (T-SQL).

Limitations

  • Kolom terhitung tidak dapat digunakan sebagai definisi batasan DEFAULT atau FOREIGN KEY atau dengan definisi batasan NOT NULL. Namun, jika nilai kolom komputasi ditentukan oleh ekspresi deterministik dan jenis data hasil diizinkan dalam kolom indeks, kolom komputasi dapat digunakan sebagai kolom kunci dalam indeks atau sebagai bagian dari salah satu PRIMARY KEY atau UNIQUE batasan.

    Misalnya, jika tabel memiliki kolom a bilangan bulat dan b, kolom komputasi yang didefinisikan sebagai a + b mungkin diindeks, tetapi kolom komputasi didefinisikan sebagai a + DATEPART(dd, GETDATE()) tidak dapat diindeks, karena nilainya mungkin berubah dalam pemanggilan berikutnya.

  • Kolom komputasi tidak dapat menjadi target pernyataan INSERT atau UPDATE.

  • SET QUOTED_IDENTIFIER harus ON saat Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan terindeks. Untuk informasi selengkapnya, lihat SET QUOTED_IDENTIFIER (Transact-SQL).

Permissions

Memerlukan izin UBAH pada tabel.

Menggunakan SQL Server Management Studio

Menambahkan kolom komputasi baru

  1. Di Object Explorer, perluas tabel yang ingin Anda tambahkan kolom komputasi baru. Klik kanan Kolom dan pilih Kolom Baru.

  2. Masukkan nama kolom dan terima jenis data default (nchar(10)). Mesin Database menentukan jenis data kolom komputasi dengan menerapkan aturan tipe data yang diutamakan ke ekspresi yang ditentukan dalam rumus. Misalnya, jika rumus mereferensikan kolom jenis uang dan kolom jenis int, kolom yang dihitung akan berjenis uang karena jenis data tersebut memiliki prioritas yang lebih tinggi. Untuk informasi selengkapnya, lihat Prioritas Tipe Data (Transact-SQL).

  3. Di tab Properti Kolom, perluas Properti Spesifikasi Kolom Terkalkulasi.

  4. Di properti anak (Rumus), masukkan ekspresi untuk kolom ini ke dalam sel grid di sebelah kanan. Misalnya, dalam kolom SalesTotal, rumus yang Anda masukkan mungkin SubTotal+TaxAmt+Freight, yang menambahkan nilai dalam kolom ini ke setiap baris dalam tabel.

    Important

    Saat rumus menggabungkan dua ekspresi dari jenis data yang berbeda, aturan untuk prioritas jenis data menentukan bahwa jenis data dengan prioritas yang lebih rendah dikonversi ke jenis data dengan prioritas yang lebih tinggi. Jika konversi bukan konversi implisit yang didukung, kesalahan Error validating the formula for column column_name. akan dikembalikan. CAST Gunakan fungsi atau CONVERT untuk mengatasi konflik jenis data. Misalnya, jika kolom jenis nvarchar dikombinasikan dengan kolom jenis int, jenis bilangan bulat harus dikonversi ke nvarchar seperti yang ditunjukkan dalam rumus ('Prod'+CONVERT(nvarchar(23),ProductID))ini . Untuk informasi selengkapnya, lihat CAST dan CONVERT (Transact-SQL).

  5. Tunjukkan apakah data dipertahankan dengan memilih Ya atau Tidak dari menu dropdown untuk properti anak Is Persisted.

  6. Pada menu File , pilih Simpannama tabel.

Menambahkan definisi kolom komputasi ke kolom yang sudah ada

  1. Di Object Explorer, klik kanan tabel dengan kolom yang ingin Anda ubah dan perluas folder Kolom .
  2. Klik kanan kolom yang ingin Anda tentukan rumus kolom komputasinya dan pilih Hapus. Pilih OK.
  3. Tambahkan kolom baru dan tentukan rumus kolom komputasi dengan mengikuti prosedur sebelumnya untuk menambahkan kolom komputasi baru.

Menggunakan Transact-SQL

Menambahkan kolom komputasi saat membuat tabel

Contoh berikut membuat tabel dengan kolom terhitung yang mengalikan nilai dalam kolom QtyAvailable dengan nilai dalam kolom 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;

Menambahkan kolom komputasi baru ke tabel yang sudah ada

Contoh berikut menambahkan kolom baru ke tabel yang dibuat dalam contoh sebelumnya.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

Secara opsional, tambahkan argumen PERSISTED untuk menyimpan nilai komputasi secara fisik dalam tabel:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;

Mengubah kolom yang sudah ada menjadi kolom komputasi

Contoh berikut memodifikasi kolom yang ditambahkan dalam contoh sebelumnya.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO