2016-03-09 2 views
0

У меня есть этот код:Как я могу моделировать несколько проверок IF?

IF (@TestStatusId = @MarkedByUser) 
    BEGIN 
     DECLARE @NOOP1 BIT; 
    END 
    ELSE 
    BEGIN      
     DECLARE @NOOP2 BIT; 
    END 

Я хотел бы иметь три условия. Когда @TestStatusId = @MarkedByUser, @TestStatusId = @MarkedByAdmin и по умолчанию, когда @TestStatusId - это что-то еще.

Есть ли способ, которым я могу это сделать без нескольких проверок IF?

Вот что я хочу, но синтаксис не кажется, действительно:

CASE @TestStatusId 
WHEN @MarkedByAdmin THEN BEGIN DECLARE @NOOP1 BIT; END 
WHEN @MarkedByUser THEN BEGIN DECLARE @NOOP2 BIT; END 
ELSE DECLARE @NOOP3 BIT; 
END 
+0

Что вы хотите в каждом случае? Объявлять разные переменные? Или некоторые переменные имеют разные значения? – Andrew

+0

Я хотел бы иметь код, который работает, чтобы заменить эти DECLAREs. Просто поместите их туда, чтобы вопрос был коротким. – Alan2

+0

Скорее всего, вам придется использовать несколько (возможно, вложенных) 'IF'. 'CASE' - это одно выражение, которое имеет единственный результат одного типа, вы не можете поместить этот код в' CASE'. –

ответ

0

Использование вложенных IFs как предложено @Vladimir

IF (@TestStatusId = 0) 
BEGIN 
    -- CODE FOR NOOP1 
    PRINT 0 
END 
ELSE IF (@TestStatusId = 1) 
BEGIN 
    -- CODE FOR NOOP2 
    PRINT 1 
END 
ELSE 
BEGIN 
    -- CODE FOR NOOP3 
    PRINT 2 
END 
0

Я действительно не нравится этот подход; поскольку вы объявляете разные переменные, остальная часть вашего кода должна повторять эти IF s, чтобы избежать использования необъявленных переменных.

Из-за отсутствия более подробной информации о том, что вам нужно достичь, вот очень простой пример того, как вы делаете то, что говорите с динамическим SQL, без повторения кода.

DECLARE @DynSQL NVARCHAR(100) 
DECLARE @Variable NVARCHAR(10) 

SELECT @Variable = CASE @TestStatusId WHEN @MarkedByAdmin THEN '@NOOP1' WHEN @MarkedByUser THEN '@NOOP2' ELSE '@NOOP3' END 

SET @DynSQL = 'DECLARE ' + @Variable + ' BIT; SET ' + @Variable + ' = 1; SELECT ' + @Variable + ';' 

EXEC sp_executesql @DynSQL 

Надеюсь, что дальнейшее объяснение вашей проблемы позволит мне удалить все это, предлагая лучшую стратегию.

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