2012-04-13 16 views
8

ile birlikte kullanabiliriz Kullanıcının girişine göre yürütmek için kayıtlı bir proc seçmek istiyorum. gibi bir şey -CASE'yi EXEC

EXEC 
CASE @InputParam 
    WHEN 'XML' THEN GetXMLData @ID, 'y' 
    WHEN 'TABLE' THEN GetTableData @ID, 'y' 
END 

bu CASE ile yapılabilir miyim yoksa If yapısı kullanılarak gündeme almalıyız

+2

'CASE' edilir Bir sorgu içinde satır içi değerlendirme için kullanılır. Eğer bir akış kontrol yapısı olduğundan 'IF' istiyorsun. – JNK

cevap

8

Burada IF yapısını kullanmak istiyorum:

IF @InputParam = 'XML' 
    EXEC GetXMLData @ID, 'y' 
IF @InputParam = 'TABLE' 
    EXEC GetTableData @ID, 'y' 
1

Böyle yapabilirsiniz:

IF @InputParam = 'XML' 
BEGIN 
    EXEC GetXMLData @ID, 'y' 
END 

IF @InputParam = 'TABLE' 
BEGIN 
    EXEC GetTableData @ID, 'y' 
END 
+0

Burada "CASE" yerine "IF" kullanmak istediğinizi düşünüyorum ... Bu geçersiz sözdizimi. – JNK

+0

Evet @JNK haklıydı, yukarıdaki kodu daha önce denedim ve işe yaramadı. – neuDev33

+0

@ neuDev33 tamam, sonra 'IF' kullanabilirsiniz. Sybase-ASE sözdizimini kullanıyordum: P –

2

Ben SQL Server bir IF daha net olurdu, buna izin bile düşünüyorum Bu senaryoda.

IF @InputParam = 'XML' 
BEGIN 
    exec GetXMLData @ID, 'y' 
END 
ELSE IF @InputParam = 'TABLE' 
BEGIN 
    exec GetTableData @ID, 'y' 
END 
0

Sen VAKA kullanabilirsiniz, ancak EXEC (cmd) kullanmak gerekecektir:

DECLARE 
@cmd VARCHAR(200) 
, @InputParam VARCHAR(5) ='TABLE' 
, @ID INT =1 

SELECT @cmd = (CASE @InputParam 
WHEN 'XML' THEN 'GetXMLData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
WHEN 'TABLE' THEN 'GetTableData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
END) 
EXEC(@cmd)