Computed Column Üzerine Filtered Index Tanımlama

SQL Server Hata Mesajlarından 10609 Id li hata mesajı üzeirnden hem hesaplanmış sütunları hem de bu sütunlar üzerine konulamayan Filtered Index ‘i örnekler üzeirnden göstereceğim.

Bir tablomuz ve bu tablomuz içrisinde bir hesaplanmış kolonumuz mevcut. Biz bu tablo üzerine bir index koymak istiyoruz fakat bu index imizi sınırlı data üzeirne koymak istediğimizden ötürü Filtered bir index kullanacağız.  Koşulumuzu da bu hesaplanmış sütun üzeirnden yapmak istiyoruz.

Filtered Index leri anlattığım geniş çaplı makalem için tıklayınız.

Bir adet temp bir tablo oluşturalım ,

CREATE TABLE #Sample_Data (
	RowID INT NOT NULL CONSTRAINT PK_Sample_Data  PRIMARY KEY
   ,Quantity INT NOT NULL
   ,Price MONEY NOT NULL
   ,TotalCost AS (Quantity * Price) PERSISTED
);

Oluşturduğumuz temp tablo üzerine bir adet filtered Index tanımlamaya çalışalım.

CREATE INDEX NIX_SQLTR_SomeDate ON #Sample_Data (Quantity)
WHERE TotalCost = 100

Aşağıda da gördüğünüz üzere  hata mesajı fırlattı.

HATA MESAJI :

Msg 10609, Level 16, State 1, Line 74
Filtered index ‘NIX_SQLTR_SomeDate’ cannot be created on table ‘#Sample_Data’ because the column ‘TotalCost’ in the filter expression is a computed column. Rewrite the filter expression so that it does not include this column.

Mesaj dan da anlaşılacağı üzere hesaplanmış kolonlar üzerine filtered ındex tanımlaması yapılamıyor. Şimdi şu soruyu sorduğunuzu duyar gibiyim. Peki normal index tanımlayabiliyor muyuz ?

CREATE INDEX NIX_SQLTR_SomeDate ON #Sample_Data (TotalCost)

Evet normal Indexleme yapabiliyorsunuz.

Leave a Reply

Your email address will not be published. Required fields are marked *