2009-08-13 10 views
14

Bunun gibi çeşitli hesap alanlarına sahip bir tablo var:SQL Server'da basit bir hesaplanmış alan nasıl kurabilirim?

MAIN_ACCT 
GROUP_ACCT 
SUB_ACCT 

Sıklıkla bunları şu şekilde birleştirmem gerekiyor:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT 
FROM ACCOUNT_TABLE 

Bunu otomatik olarak yapan hesaplanmış bir alan istiyorum. sadece şunu söyleyin:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE 

Bunu yapmanın en iyi yolu nedir?

SQL Server 2005 kullanıyorum.

cevap

25
ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED 

Bu bir hesaplanan sütun devam edecek ve sütunun İntial yaratılması acı yavaş olabilir ki oldu kez (bir kayıt sayısı çoksa görünümü veya UDF bir hesaplama daha Seçilen makinede iyi performans gösterebilir ve muhtemelen düşük kullanım süreleri sırasında gerçekleşmelidir). Eklemeleri ve güncelleştirmeleri yavaşlatacaktır. Genelde kilitleme sorunları olmadıkça, yavaş bir ekleme veya güncelleme, kullanıcılar tarafından bir seçimdeki gecikmeden daha iyi tolere edilir.

Bunu yapmak için en iyi yöntem, kullanımınıza ve ihtiyacınız olan performansa büyük ölçüde bağlıdır. Çok fazla kayıtınız yoksa veya hesaplanan sütun sık sık çağrılmayacaksa, kalıcı bir sütun istemeyebilirsiniz, ancak yıl boyunca veya diğer büyük grupların tüm kayıtları ile sık sık raporlar çalıştırıyorsanız Veriler, kalıcı hesaplanan sütun işlerini sizin için daha iyi bulabilir. Bu doğanın herhangi bir görevinde olduğu gibi, durumunuzda en iyi neyin işe yaradığını bilmenin tek yolu test etmektir.

+0

Büyük, benim için hala oldukça birkaç yıl sonra yararlı. – enderland

3

Eh kullanıyorum, sen ACCOUNT_TABLE bir görünüm oluşturmak ve bu soru sorabilir. Ya da aynı şeyi gerçekleştirecek bir kullanıcı tanımlı fonksiyon yaratabileceğine inanıyorum.

8

Bu, Görünüm için harika bir adaydır.

CREATE VIEW vwACCOUNT_TABLE 
AS 

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE 

GO 

--now select from the View 
SELECT ACCT_NUMBER FROM vwACCOUNT_TABLE 
+0

Ugh. Beni birkaç saniyede dövmeliydim. heh – DavidStein

5
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT; 

kolon tabloda kalıcı değildir, on-the-CLY bunu referans, her zaman yeniden oluşturulur. Bir görünüm kullanarak aynı sonucu elde edebilirsiniz. Filtreleme kullanırsanız veya hesaplanmış sütun üzerinde sipariş verirseniz ve bir dizin eklemek istiyorsanız Creating Indexes on Computed Columns'a bakın.

+2

YOu, sütunu devam ettirebilir ve bir görüntüde yapmak zorunda kalacağınız zamanı yeniden derlemek için harcayamazsınız. Bizimkileri koruyoruz, çünkü veriler değiştiğinde ufak bir gecikme, bilgiyi sorgulamak istediğimizde uzun gecikmeden çok daha iyi. Kalıcı – HLGEM

+0

devam ederse sütunu da endeksleyebilirsiniz. Projede bakım yaparken kalıcı kolondan haberdar olduğunuz sürece. Eğer değilse, sorunların ortaya çıkabileceği yer burasıdır. – Coops

İlgili konular