2010-03-14 15 views
76

MS SQL Server 2008'de bir varchar sütunu için 4 farklı değer belirtmenin bir yolu var mı?Varchar() sütununu belirli değerlerle sınırlandır?

Örneğin, ben sadece 'Günlük' kabul eden bir sütun denilen Frekansı (varchar) ihtiyaç 'Haftalık', 'Aylık' olası değerler

SQL Server içinde ayarlamak için bu mümkün mü olduğu, 'Yıllık' Yönetim Stüdyosu oluşturulurken mi?

+4

Daha fazla geçerli değer olmayacağını ve tabloda çok sayıda satır olacağını varsayarsak, olası değerleri bir varchar() değerinden daha küçük ve hızlı bir şekilde kodlarım. – Wikser

cevap

93

Bu sütunda, değerleri kısıtlayan bir check constraint eklemeyi düşündünüz mü? gibi bir şey: -> Kısıtlamaları kontrol edin -> Add -

CREATE TABLE SomeTable 
(
    Id int NOT NULL, 
    Frequency varchar(200), 
    CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')) 
) 
+2

Teşekkür ederim - bu harika çalıştı. Yapmam gereken küçük bir değişiklik de "Frekans IN ...." nin parantez içine alınması gerektiğiydi. SQL server stüdyosu bir sebepten ötürü beğenmedi. – Adam

+1

Bu kısıtlama kontrol durumu hassas mı? – RWendi

+3

Dördüncü satır 'Frekans varchar (200)' – BillOverFlow

45

check constraint.

Kontrol kısıtlamaları bir sütundaki verilere dayalı olmayan bir mantıksal ifade değerler geçerlidir belirler. örneği için, maaş sütununun değerleri tarafından sınırlandırılabilir, yalnızca $ 15.000 ile 100.000 $ arasında değişen verilere izin veren bir CHECK kısıtlaması oluşturur. Bu , maaşların düzenli maaş aralığının ötesine girilmesini önler. Bunu yapmayı tercih nasıl yukarıdaki linke, açıklandığı gibi Ayrıca, skaler fonksiyonları ile kontrol kısıtlamaları uygulayabilir

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency 
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')) 

:

Sen gibi bir şey istiyorum.

+0

Bu cevap çok iyiydi .. neden birden fazla kabul edemiyoruz !! :) – Adam

+1

Evet, bu daha iyidir :), bunun için –

4

bir tablo
Sağ tıklayın düzenliyor> ifadesi alanına Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') gibi bir şey ve (Ad) alanında iyi bir kısıt adını yazın.
İşiniz bitti. Şahsen

11

, ben tinyint olarak kodlamak ve ediyorum:

  • Ya: Yabancı bir anahtarla bir arama tablosu kullanın: 1 ile 4 arasında
  • kısıtlamayı kontrol istemci üzerinde metne değiştirmek Ya

nedenleri:

  • O metni saklamak için ortalama 8 bayt alacak, t 1 bayt inyint. Milyonlarca satır, bu bir fark yaratacak.

  • Harmanlamadan ne haber? "Günlük" "DAILY" ile aynı mı? Bu tür bir karşılaştırma yapmak için kaynak gerektirir.

  • Son olarak, "Biweekly" veya "Hourly" eklemek isterseniz? Bu, bir arama tablosuna yeni satırlar ekleyebileceğiniz zaman bir şema değişikliği gerektirir.

İlgili konular