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 atauFOREIGN KEY
batasan atau denganNOT 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 satuPRIMARY KEY
atauUNIQUE
batasan.Misalnya, jika tabel memiliki kolom
a
bilangan bulat danb
, kolom komputasi yang didefinisikan sebagaia + b
mungkin diindeks, tetapi kolom komputasi didefinisikan sebagaia + 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
harusON
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
Di Object Explorer, perluas tabel yang ingin Anda tambahkan kolom komputasi baru. Klik kanan Kolom dan pilih Kolom Baru.
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).
Di tab Properti Kolom, perluas properti Spesifikasi Kolom Komputasi .
Di properti anak (Rumus), masukkan ekspresi untuk kolom ini di sel kisi di sebelah kanan. Misalnya, dalam kolom, rumus yang
SalesTotal
Anda masukkan mungkinSubTotal+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 atauCONVERT
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).Tunjukkan apakah data dipertahankan dengan memilih Ya atau Tidak dari menu dropdown untuk properti Anak yang Dipertahankan.
Pada menu File , pilih Simpan nama tabel.
Menambahkan definisi kolom komputasi ke kolom yang sudah ada
- Di Object Explorer, klik kanan tabel dengan kolom yang ingin Anda ubah dan perluas folder Kolom .
- Klik kanan kolom yang ingin Anda tentukan rumus kolom komputasinya dan pilih Hapus. Pilih OK.
- 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