2012-04-13 3 views
8

Я хочу выбрать сохраненную процедуру proc для выполнения на основе ввода пользователем. Что-то вроде -можно использовать CASE с EXEC

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

Может ли это быть сделано с CASE или я должен рассмотреть вопрос об использовании If конструкции?

+2

'CASE' является используется для внутренней оценки в запросе. Вы хотите 'IF', поскольку это конструкция управления потоком. – JNK

ответ

8

Вы хотите использовать IF конструкцию здесь:

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

Вы можете сделать это следующим образом:

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

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

Я думаю, вы хотите использовать 'IF' вместо' CASE' здесь ... Это недопустимый синтаксис. – JNK

+0

Да @JNK прав, я уже пробовал вышеуказанный код, и он не сработал. – neuDev33

+0

@ neuDev33 ok, тогда вы можете использовать 'IF'. Я использовал синтаксис Sybase-ASE: P –

2

В этом случае я думаю, что даже если SQL Server допускал, что, ПЧ будет более ясным.

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

Вы можете использовать случай, но вы должны будете использовать EXEC (CMD):

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) 
Смежные вопросы