Помогите с IF в SQL SERVER Хранимая процедура - PullRequest
3 голосов
/ 10 мая 2009

Может кто-нибудь помочь мне с построением IF в хранимой процедуре на сервере SQL.

По сути, у меня есть простая хранимая процедура, но теперь мне нужно передать новый входной параметр, который в зависимости от того, является ли он истинным, передает значение D, а если значение false, я передаю значение A. Но изменение происходит в середине подзапрос .. позвольте мне объяснить ... вот хранимая процедура. в основном, если я отправляю True для ReturnOldStatus, я выполняю подзапрос ItemStatus = 'D', а если он ложный, тогда я передаю ItemStatus = 'A'

CREATE PROCEDURE [dbo].[MyTempStoredProc]
(
 @IdOffice                                 Int,
 @ReturnOldStatus                           bit
)
AS
BEGIN
   SET NOCOUNT ON;
   SELECT * FROM Offices

   WHERE
      IdOffice = @IdOffice  

      AND (V.OffType NOT IN (
                        SELECT *  FROM MiscOff 
                        WHERE
ItemStatus= 'D') // This needs to be ItemStatus ='A' if FALSE is passed in on the input param

Есть идеи ??

Спасибо

Ответы [ 3 ]

5 голосов
/ 10 мая 2009

Я бы решил это так:

    declare @itemStatus varchar(1);
    if (@inputParam = 'FALSE')
    begin
        set @itemStatus = 'A'
    end
    else
        set @itemStatus = 'D'

   SELECT * FROM Offices
   WHERE
          IdOffice = @IdOffice      
          AND (V.OffType NOT IN (
                   SELECT *  FROM MiscOff 
                   WHERE ItemStatus= @itemStatus) 
              )

T-Sql не мой родной язык, поэтому там могут быть ошибки ...

2 голосов
/ 10 мая 2009

Просто используйте оператор T-SQL , если :

IF @ReturnOldStatus = 0
    BEGIN
        --Some statements
    END
ELSE
    BEGIN
        --Some other statements
    END
1 голос
/ 10 мая 2009

Я думаю, этого будет достаточно для вашей проблемы. Если нет, посмотрите на операторы DECLARE / SET в TSQL.

CREATE PROCEDURE [dbo].[MyTempStoredProc] 
    (@IdOffice Int, 
     @ReturnOldStatus bit ) 
AS BEGIN 
    SET NOCOUNT ON; 

    SELECT * FROM Offices 
    WHERE IdOffice = @IdOffice  
          AND (V.OffType NOT IN (SELECT * FROM MiscOff 
                                 WHERE (ItemStatus= 'D' AND @ReturnOldStatus = 1)
                                         OR
                                       (ItemStatus= 'A' AND @ReturnOldStatus = 0) 
                                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...