Aracılığıyla paylaş


Tabloda hesaplanan sütunları belirtme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Hesaplanan sütun, sütun PERSISTED olarak işaretlenmedikçe fiziksel olarak tabloda depolanmayan bir sanal sütundur. Hesaplanan sütun ifadesi, ait olduğu sütunun değerini hesaplamak için diğer sütunlardaki verileri kullanabilir. SQL Server Management Studio (SSMS) veya Transact-SQL (T-SQL) kullanarak SQL Server'da hesaplanan sütun için bir ifade belirtebilirsiniz.

Limitations

  • Hesaplanan bir sütun, bir DEFAULT veya FOREIGN KEY kısıtlaması olarak veya bir NOT NULL kısıtlaması ile kullanılamaz. Ancak, hesaplanan sütun değeri belirlenici bir ifadeyle tanımlanırsa ve sonucun veri türüne dizin sütunlarında izin verilirse, hesaplanan sütun bir dizinde anahtar sütun olarak veya herhangi PRIMARY KEY bir ya da UNIQUE kısıtlamanın parçası olarak kullanılabilir.

    Örneğin, tabloda tamsayı sütunları a ve b varsa, a + b olarak tanımlanan bir hesaplanan sütun dizine alınabilir, ancak a + DATEPART(dd, GETDATE()) olarak tanımlanan bir hesaplanan sütun dizine alınamaz çünkü sonraki çağrılarda değeri değişebilir.

  • Hesaplanan sütun, INSERT veya UPDATE deyiminin hedefi olamaz.

  • SET QUOTED_IDENTIFIER hesaplanan sütunlarda veya dizinlenmiş görünümlerde dizin oluştururken veya değiştirirken olmalıdır ON . Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER (Transact-SQL).

Permissions

Tabloda değişiklik yapmak için ALTER izni gereklidir.

SQL Server Management Studio'yu kullanma

Yeni hesaplanan sütun ekleme

  1. Nesne Gezgini'nde, yeni hesaplanan sütunu eklemek istediğiniz tabloyu genişletin. Sütunlar'a sağ tıklayın ve Yeni Sütun'u seçin.

  2. Sütun adını girin ve varsayılan veri türünü (nchar(10)) kabul edin. Veritabanı Altyapısı, formülde belirtilen ifadelere veri türü önceliği kurallarını uygulayarak hesaplanan sütunun veri türünü belirler. Örneğin, formül money türünde bir sütuna ve int türünde bir sütuna başvuruda bulunuyorsa, hesaplanan sütun para türünde olur çünkü bu veri türü daha yüksek önceliğe sahiptir. Daha fazla bilgi için bkz. Veri Türü Önceliği (Transact-SQL).

  3. Sütun Özellikleri sekmesinde Hesaplanan Sütun Belirtimi özelliğini genişletin.

  4. (Formül) alt özelliğinde, sağdaki kılavuz hücresinde bu sütun için ifadeyi girin. Örneğin, bir SalesTotal sütunda girdiğiniz formül, tablodaki her satır için bu sütunlara değer ekleyen formülü olabilir SubTotal+TaxAmt+Freight.

    Important

    Formül farklı veri türlerinin iki ifadesini birleştirdiğinde, veri türü önceliği kuralları düşük önceliğe sahip veri türünün daha yüksek önceliğe sahip veri türüne dönüştürüleceğini belirtir. Dönüştürme desteklenen bir örtük dönüştürme değilse hata Error validating the formula for column column_name. döndürülür. Veri türü çakışmasını çözmek için CAST veya CONVERT işlevini kullanın. Örneğin, nvarchar türünde bir sütun int türünde bir sütunla birleştirilirse, bu formülde gösterildiği gibi tamsayı türü ('Prod'+CONVERT(nvarchar(23),ProductID)) dönüştürülmelidir. Daha fazla bilgi için bkz . CAST ve CONVERT (Transact-SQL).

  5. KalıcıDır alt özelliği için açılan listeden Evet veya Hayır'a tıklayarak verilerin kalıcı olup olmadığını belirtin.

  6. Dosya menüsünden Kaydet'i seçintablo adı.

Mevcut bir sütuna hesaplanan sütun tanımı ekleme

  1. Nesne Gezgini'nde, değiştirmek istediğiniz sütunu içeren tabloya sağ tıklayın ve Sütunlar klasörünü genişletin.
  2. Hesaplanan sütun formülü belirtmek istediğiniz sütuna sağ tıklayın ve Sil'i seçin. Tamam'ı seçin.
  3. Yeni bir sütun ekleyin ve yeni bir hesaplanan sütun eklemek için önceki yordamı izleyerek hesaplanan sütun formülünü belirtin.

Transact-SQL kullanma

Tablo oluştururken hesaplanan sütun ekleme

Aşağıdaki örnek, QtyAvailable sütunundaki değeri UnitPrice sütunundaki değer ile çarpan hesaplanan bir sütuna sahip bir tablo oluşturur.

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;

Mevcut tabloya yeni bir hesaplanan sütun ekleme

Aşağıdaki örnek, önceki örnekte oluşturulan tabloya yeni bir sütun ekler.

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

İsteğe bağlı olarak, hesaplanan değerleri tabloda fiziksel olarak depolamak için PERSISTED bağımsız değişkenini ekleyin:

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

Var olan bir sütunu hesaplanan sütun olarak değiştirme

Aşağıdaki örnek, önceki örnekte eklenen sütunu değiştirir.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

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