2010-12-02 15 views
10

Bir bit alanının doğru ya da yanlış olmasına bağlı olarak koşullu olarak bir şey seçmek istiyorum.Neden SQL durum ifadesinde bir boole ifadesi olarak bir bit alanı kullanamıyorum?

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

Bu ne şu beri bana mantıklı biraz alanım gibi olan isSoon bir boolean ifadesi, olmak zorunda "ZAMAN": Bu Başlangıçta çalıştı sözdizimi oldu. Ancak, bu işe yaramadı. Ne sonunda yapmak zorunda idi: Bu benim için gereksiz görünüyor

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

... yerine daha sezgisel if(isSoon) bir programlama dilinde if(isSoon == True) yazma gibi ve ters geliyor. SQL neden böyle kuruldu? Çünkü bit alanları gerçekten boole değiller mi?

+1

Ayrıca hangi veritabanı sağlayıcısını kullandığınızı söyleyebilir misiniz? MySQL bununla ilgili bir sorun yok gibi görünüyor. –

+2

Bu da beni rahatsız ediyor, ancak sql bu şekilde ayarlanmadı. Sadece bir şekilde bir parametre bir SP'ye geçirdiğinizde kullanamayacağınız şekilde (ör. "ListPermissionsByUser @DomainName + '\' + @ UserName" komutunu çalıştıramazsınız) –

cevap

13

Bit veri türü , boole tipi olmadığı için, bit depolama alanını optimize etmek için kullanılan bir veri türüdür.

dize "doğru" ve "yanlış" MSDN alıntı Ancak yanıltıcı olabilir biraz dönüştürülebilir olması, biraz "1 değerini alabilir bir tamsayı veri türü, 0'dır veya NULL. "

+4

Bu, NEDEN? . Evet, 1, 0 veya boş. Ama bu sadece null bir booledir (sütunun boş değerlere izin verdiği varsayılarak). NEDEN SQL milleti, bunu temsil ettiği boole değil, zamanın% 99,9999'u olarak kullanmak yerine bir 'supersmallint' gibi davranmaya karar verdi. – Vaccano

+2

@Vaccano: Aslında cevaptır. 3 olası duruma sahip veri tipi (SQL durumundaki null ya da nollable bool - bit), 2 olası durumlu (bool) veri tipinden çok farklıdır. –

İlgili konular