2014-09-01 4 views
0

Я пытаюсь сделать такой переключатель, как C# в sql или если с разными условиями.CASE WHEN THEN с подзапросом

Я использую это, но это не работает вообще:

это для хранимой процедуры:

CREATE PROCEDURE [dbo].[Mystoredprocedure] 
@Value INT 
AS 
BEGIN 

     SET NOCOUNT ON; 
CASE 

WHEN @Value = 0 
THEN SELECT * FROM mytable1 


WHEN @Value = 1 
THEN SELECT * FROM mytable2 

WHEN @Value = 2 
THEN SELECT * FROM mytable3 

END 

Но это не работает, я поиск примеров, но я не найти то, что Я действительно хочу.

Я тоже попробовать:

CREATE PROCEDURE [dbo].[Mystoredprocedure] 
    @Value INT 
    AS 
    BEGIN 
      SET NOCOUNT ON; 

    IF @Value = 0 
    BEGIN 
     SELECT * FROM MyTable1 
    END 

    ELSE IF @Value = 1 
    BEGIN 
     SELECT * FROM MyTable2 
    END 

    ELSE IF @Value = 2 
    BEGIN 
     SELECT * FROM Mytable3 
    END 

END 

У вас решение, чтобы исправить это? Благодаря !

+1

Какая у вас проблема с решением 'if'? –

+0

Он говорит, что перед каждой версией есть ошибка systax, если – Julien698

+1

'CASE' является T-SQL - это ** выражение ** - он может возвращать одно из нескольких значений. Но это ** НЕ ** оператор управления потоком, как в C#, вам нужно использовать 'IF ... THEN ....' для этого –

ответ

1

Я предлагаю вам попробовать это:

CREATE PROCEDURE [dbo].[Mystoredprocedure] (@Value INT) 
AS 
BEGIN 

    IF @Value = 0 
     BEGIN 
      SELECT * FROM mytable1 
     END 
    ELSE IF @Value = 1 
     BEGIN 
      SELECT * FROM mytable2 
     END 
    ELSE IF @Value = 2 
     BEGIN 
      SELECT * FROM mytable3 
     END 

END 

Если я получаю это право, проблема заключается в том, что у вас есть переменная в запросе, но не передавать значение в ней. Вы объявляете это, и оно пустое. С таким образом, если вы звоните запрос

EXEC [dbo].[Mystoredprocedure] 1 

Он должен выбрать из туЬаЫх 2 и т.д.

+0

Спасибо за ваш ответ, но он говорит, что там синтаксическая ошибка с CASE и каждый WHEN – Julien698

+0

@ Julien698 Я обновил ваш ответ. '' '' CASE WHEN'''' используется, когда вы находитесь в '' '' SELECT''''. Нормальные условия '' '' IF ... ELSE'''' могут использоваться в procs и т. Д. –

+0

, что хороший код, но он не работает с else, я должен положить, если везде, а не «else» если «для других условий» – Julien698

0

Наконец я нашел решение, это легко. Я только что удаляю else перед if и работает!

CREATE PROCEDURE [dbo].[MystoredProcedure] 
(@Value INT) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 



IF @Value = 0 
BEGIN 
    SELECT * FROM mytable1 
END 

IF @Value = 1 
BEGIN 
    SELECT * FROM mytable2 
END 

IF @Value = 2 
BEGIN 
    SELECT * FROM mytable3 
END 

IF @Value = 3 
BEGIN 
    SELECT * FROM mytable4 
END 

END 
Смежные вопросы