2012-01-26 14 views
1

私はストアドプロシージャを作成していますが、ここでは異なるパラメータの複数の条件を一度に評価したいと考えています。これに最も適した構文は何ですか?あなたが使用することができますストアドプロシージャの1つのif文で異なる条件を評価する

AS 
BEGIN 
    DECLARE @GARRISON nvarchar(255) 
    DECLARE @ASSETTYPE nvarchar(255) 
    DECLARE @FIVALUE int 

    IF ( (@GARRISON IS NOT 'Netheravon' 
      AND @GARRISON IS NOT 'Ludgershall' 
     ) 
      AND @INTERRUPT >= 5) 
     BEGIN 

     END 
    ELSE 

END 

答えて

6

:以下

は私が持っているものです。

IF ((@GARRISON != 'Netheravon' AND @GARRISON != 'Ludgershall')) 
AND @INTERRUPT >= 5) 

これは、あなたが持っていた問題は、あなたが@variable IS NOT 'constant'持っているということでした

IF (@GARRISON NOT IN ('Netheravon', 'Ludgershall') 
AND @INTERRUPT >= 5) 

に短縮することができます - nullをチェックしない限り、このありえない有効なSQL構文を。平等のために=、非等価使用の場合は!=または<>(どちらもIIRC)。


編集:これは私がテストに使用した正確なsctiptであり、期待どおりに機能します。 SQL Server 2008

DECLARE @GARRISON nvarchar(255) 
DECLARE @INTERRUPT INT 

SET @GARRISON = 'Test' 
SET @INTERRUPT = 10 


IF (@GARRISON NOT IN ('Netheravon' ,'Ludgershall') 
    AND @INTERRUPT >= 5) 
BEGIN 
SELECT 1 
END 

上記の両方の条件が真と評価されるため、上記の値は正しく「1」を出力します。 @INTERRUPTを4に変更するか、または@GARRISONをNetheravonまたはLudgershallに変更すると、出力はありません。これは私が期待する正確な行動です。

注:SQLで空BEGIN...ENDブロックを持つことができないので、それが空である場合は、エラーにそのためのIncorrect syntax near 'END'.

+0

感謝を得るでしょう、今それを行います。 – dotnetdev

+0

まだWrkしていません。完全な質問については私の編集を参照してください。 – dotnetdev

+0

@dotnetdev - "didnt work"を定義します。期待された結果と実際に何が起こったのか – Jamiec

関連する問題