SQL Server 2012を使用しています。ストアドプロシージャがあり、その一部はユーザー名がテーブルにあるかどうかをチェックします。そうであれば、1を返し、そうでなければ2を返します。これは私のコードです:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
ただし、次のエラーが引き続き表示されます。
「1」付近の構文が正しくありません。
これはIF EXISTでも可能ですか?
よろしく、
マイケル
この方法でやりたい場合は、これが後の構文です。
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
BEGIN..END
ステートメントを厳密に必要とするわけではありませんが、おそらく最初からその習慣に入ることをお勧めします。
IIFを使用してはどうですか?
SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
また、行の存在を確認するためにEXISTSを使用する場合は、*を使用せず、1を使用します。コストが最も低いと思います。
SELECT
のないSQLでは、何も結果として得られません。 IF-ELSE
ブロックの代わりに、このためにCASE
ステートメントを使用することを好みます
SELECT CASE
WHEN EXISTS (SELECT 1
FROM tblGLUserAccess
WHERE GLUserName = 'xxxxxxxx') THEN 1
ELSE 2
END
select
またはprint
または..など、必要な出力。
そのため、次のコードを使用します。
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2
変数@Result
を定義して、データを入力できます
DECLARE @Result AS INT
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
SET @Result = 1
else
SET @Result = 2