Bagikan melalui


Menentukan kolom komputasi dalam tabel

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

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).

Batasan

  • Kolom komputasi tidak dapat digunakan sebagai DEFAULT definisi atau FOREIGN KEY batasan atau dengan NOT NULL definisi batasan. 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).

Izin

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 Komputasi .

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

    Penting

    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 yang Dipertahankan.

  6. Pada menu File , pilih Simpan nama 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 komputasi yang mengalikan nilai dalam QtyAvailable kolom kali nilai dalam UnitPrice kolom.

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