8

Sql Server 2012を使用しています。ストアドプロシージャがあり、その一部がユーザー名がテーブルにあるかどうかを確認します。もしそうであれば、1を返し、ない場合は、2を返すこれが私のコードです:SQL Server IF EXISTS THEN 1 ELSE 2

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2 

はしかし、私は以下のエラーを受信し続ける:

Incorrect syntax near '1'.

はIFと、これがも可能です存在?あなたは、このようにそれを行う必要がある場合

よろしく、

マイケル

答えて

13

、これはあなたが後にしている構文は次のとおりです。

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN 
    SELECT 1 
END 
ELSE 
BEGIN 
    SELECT 2 
END 

あなたは厳密にBEGIN..END文は必要ありませんが、それは最初からその習慣を身に取得することが最善です。

+1

多くのおかげで、私はあなたのソリューションに行って、それは動作します。 – Michael

2

あなたは、何が必要出力することで、あなたのデータを記入するようにselectまたはprintや..を

DECLARE @Result AS INT 

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
SET @Result = 1 
else 
SET @Result = 2 
3

を変数@Resultを定義することができます。あなたは何も得られないことができSELECTせずにSQLで

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2 
1

ので、次のコードを使用します。代わりにIF-ELSEブロックの私はどのようにIIFを使用することについて、この

SELECT CASE 
     WHEN EXISTS (SELECT 1 
         FROM tblGLUserAccess 
         WHERE GLUserName = 'xxxxxxxx') THEN 1 
     ELSE 2 
     END 
1

ためCASEステートメントを使用することを好みますか?

また
SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2) 

、使用している場合は、行のexistanceをチェックし、*を使用しないでください、私はそれがコストをないようにしていると信じて1を使用するために存在します。

+0

EXISTSで「SELECT *」と「SELECT 1」または「SELECT 0」を使用すると、SQL Serverにコストの差はありません。より多くの好みの問題。 –