2012-06-27 10 views
10

Kayıtlı yordamımda CASE kullanmak istiyorum. Benim kodunda bazı sözdizimi hatası alıyorum: çalıştırırkenSQL Server'da geçiş nasıl kullanılır?

select 
    case @Temp 
    when 1 then (@[email protected]+1) 
    when 2 then (@[email protected]+1) 
    end 

, ben alıyorum:

yanlış sözdizimi yakın '='. Eşit yakın

@selectoneCount = @selectoneCount + 1 

: Burada bu hattında

.

Aslında başka bir sp'den @ temp'e dönüş değeri alıyorum ve sonra @ temp = 1, sonra @SelectoneCount sayısını 1 olarak kabul ediyorum ve bu şekilde devam ediyorum. Lütfen doğru sözdiziminin ne olduğunu bana bildirin.

+2

'CASE' bir döndüren bir * ifadesi * ise * değeri *. Burada ne yapmaya çalıştığınıza dair hiçbir fikrim yok - belki genel amacı bize anlat, ve sonra yukarıdaki kodu daha büyük bir örnek içine yerleştirmek için bağlamı ayarlamak? –

+0

Bu yanıt, bir yanıt seçmek yerine mantıksal akış yapmak istediğinizde yararlıdır. Http://stackoverflow.com/a/14760234/74585 –

cevap

29

CASEiçin bir "anahtar" - değerini döndür - tam bir kod bloğu yürütmemelidir.

SELECT 
    @selectoneCount = CASE @Temp 
         WHEN 1 THEN @selectoneCount + 1 
         WHEN 2 THEN @selectoneCount + 1 
        END 

@temp Eğer bu değerlerin hiçbiri ayarlanır (1 veya 2), sonra yine bir NULL

+0

Tanx, cevap için Tanx, sqlserver'daki 'case' kelimesinin aynı switch-eylemleri olduğunu düşündüm C# $ ( –

+0

kullanımı "ELSE @ selectoneCount" * eğer * 1 veya 2 ve @selectoneCount değişmediğinde varsayılan bir durum oluşturmak istiyorsanız. – woodvi

3

Bu, seçili bir ifadedir, bu nedenle davanın her bir dalı bir şey döndürmelidir. Eylemleri gerçekleştirmek istiyorsanız, sadece bir if kullanın.

2
select 
     @selectoneCount = case @Temp 
     when 1 then (@selectoneCount+1) 
     when 2 then (@selectoneCount+1) 
     end 

    select @selectoneCount 
alırsınız:

Böyle bir şey için kodunuzu değiştirmeniz gerekir

1

Aslında başka bir sp'den @ temp'e dönüş değeri alıyorum ve sonra @ temp = 1, sonra @SelectoneCount sayısını 1 olarak kabul ediyorum. Lütfen doğru sözdiziminin ne olduğunu bana bildirin.

nesi var: (bu usul kod olmanın kokuyorsun rağmen - Genellikle SQL kullanmak için en iyi yolu)

IF @Temp = 1 --Or @Temp = 2 also? 
BEGIN 
    SET @SelectoneCount = @SelectoneCount + 1 
END 

+1

Bu yüzden orada geçiş yapmak istedim şartlar –

+1

@RamSingh - SQL dilinde bir anahtar * deyimi * yok. Diğerlerinin de belirttiği gibi, bir "CASE" * ifadesi * kullanabilirsiniz, ancak bir skaler değeri hesaplamalı ve döndürmelidir. –

+1

tamam teşekkürler, bu benim durumum için kullanmam gerekiyor demektir. –

İlgili konular