web-dev-qa-db-ja.com

SQL Serverが存在する場合1その他2

SQL Server 2012を使用しています。ストアドプロシージャがあり、その一部はユーザー名がテーブルにあるかどうかをチェックします。そうであれば、1を返し、そうでなければ2を返します。これは私のコードです:

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

ただし、次のエラーが引き続き表示されます。

「1」付近の構文が正しくありません。

これはIF EXISTでも可能ですか?

よろしく、

マイケル

31
Michael

この方法でやりたい場合は、これが後の構文です。

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

BEGIN..ENDステートメントを厳密に必要とするわけではありませんが、おそらく最初からその習慣に入ることをお勧めします。

66
Rich Benner

IIFを使用してはどうですか?

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

また、行の存在を確認するためにEXISTSを使用する場合は、*を使用せず、1を使用します。コストが最も低いと思います。

7
AntDC

SELECTのないSQLでは、何も結果として得られません。 IF-ELSEブロックの代わりに、このためにCASEステートメントを使用することを好みます

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

selectまたはprintまたは..など、必要な出力。

そのため、次のコードを使用します。

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

変数@Resultを定義して、データを入力できます

DECLARE @Result AS INT

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