2009-05-10 6 views
3

Quelqu'un peut-il m'aider avec la construction d'un IF dans une procédure stockée dans le serveur sql. Fondamentalement, j'ai une procédure stockée simple, mais je dois maintenant passer un nouveau paramètre d'entrée qui, s'il est vrai, je passe la valeur D et si son faux je passe la valeur A. Mais le changement est au milieu d'une sous-requête .. laissez-moi vous expliquer ... voici la procédure stockée. En gros, si j'envoie vrai pour ReturnOldStatus j'exécute la sous-requête ItemStatus = « D » et si elle est fausse alors je passe ItemStatus = « A »Aide avec un IF dans SQL Server Procédure stockée

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 

Toutes les idées ??

Merci

Répondre

5

Je résous comme ceci:

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 n'est pas ma langue maternelle, donc il peut y avoir des erreurs là-dedans ...

1

Je pense que cela suffira pour votre problème. Sinon, regardez dans les instructions DECLARE/SET dans 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) 
           ) 
2

Il suffit d'utiliser le T-SQL déclaration if:

IF @ReturnOldStatus = 0 
    BEGIN 
     --Some statements 
    END 
ELSE 
    BEGIN 
     --Some other statements 
    END 
+0

merci mais cela je veux dire besoin de dupliquer les instructions sQL serait-ce pas .. ?? –

+0

Correct, la plupart du SQL devrait être dupliqué. Il existe d'autres options, en fonction de ce que vous devez accomplir exactement. La réponse de Frederik ne nécessite pas de duplication de code et semble également résoudre le problème. – Oded

Questions connexes