2009-03-14 26 views
20

SQL 2005'te bir SQL deyiminde bir Vaka ifadesi kullanmak mümkün mü? Bildiğim kadarıyla ....Bir sql içinde bir Case deyimi kullanmak mümkün mü? Gönderen

Eğer karşı neler yaşadığını SQL arka uç belirtmediğinden

SELECT Md5 FROM 
CASE 
    WHEN @ClientType = 'Employee' THEN @Source = 'HR' 
    WHEN @ClientType = 'Member' THEN @Source = 'Other' 
END CASE 
WHERE Current = 2; 

cevap

6

varsayarsak SQL Server: Dinamik SQL kullanmak gerekir

. Dize oluşturun ve sonra dize ile sp_executesql çağırın.

Düzenleme: Daha da iyisi, yalnızca uygun deyimi yürütmek için ifadeleri kullanın ve değeri bir değişkene atayın. Mümkünse dinamik SQL'den kaçınmalısınız.

0

, bu düzgün cevap vermek zor olacak: Mesela, şöyle bir şey çalışıyorum Bunu ne MS SQL Server'a ne de Interbase/Firebird'e karşı yapamazsınız. Ben o cevabı hiçbir şekilde olduğunu söylemek oldukça güvenli olduğunu düşünüyorum ... gerçi, diğer arka uç sunucular için

Marc

0

konuşamıyor. Ve bu SQL lehçesi ne olursa olsun.

22

Bunun mümkün olduğuna inanmıyorum. Bir şey için, sorgu iyileştiricileri FROM yan tümcesinde tablo benzeri şeylerin belirli bir listesini varsayar. @clienttype yüklem verilen

SELECT md5 
FROM hr 
WHERE @clienttype = 'Employee' 
AND  current = 2 
UNION 
SELECT md5 
FROM other 
WHERE @clienttype = 'Member' 
AND  current = 2; 

Sadece BİRLİĞİ yarısı Doğru olabilir: Aklıma

en basit çözüm iki tablo arasında bir UNION olacaktır.

+0

Genellikle deyimi ise bir yazma, ancak bir kombine bu stratejiyi kullanırken 'takın' olur o zorunda beni kurtarır insert kısmını birkaç kez yazın, bu çözümü sevin, şimdiden itibaren mümkün olduğunca bu şekilde yapıyor olacak. :) –

+0

Sadece 'WHERE' koşulunun tablodaki her satır için yürütüldüğünü unutmayın. Yani durum biraz daha karmaşıksa ve milyonlarca satır varsa bir seçenek olmayabilir. –

1

Hayır, bir CASE ifadesi kullanarak sorgulamak için bir tablo seçemezsiniz. CASE ifadeleri, yalnızca bir sütunun değeri veya WHERE ifadenizin bir parçası gibi ifadeler içinde gider.

sadece bir değer için arıyorsanız bu, bunu yapmalıdır:

IF @ClientType = 'Employee' BEGIN 
    SET @Source = (SELECT Md5 FROM HR WHERE Current = 2) 
END 
ELSE IF @ClientType = 'Member' BEGIN 
    SET @Source = (SELECT Md5 FROM Other WHERE Current = 2) 
END 
+0

Bu "uzun teslim" olduğu gibi, bu benim aldığım yaklaşım (ama oyu kalmadı: - /). Statik SQL üretmek için bir araç kullanmayı çok isterim (yani 3 satır Ruby mi yoksa 1 satır Perl? :-) vs dinamik SQL ile uğraşırken (ben _need_ dinamik SQL) dinamik SQL gerekli. –

İlgili konular