0

私のデータベースにレコードがない場合、それを挿入しようとしています。以下のクエリは私のチェックです。コードにはエラーがないので、本当にチェックしたかどうかわかりません。

レコード 1

IF NOT EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 1 )
INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
VALUES (1,'User','UserInfo')

レコード 2

IF NOT EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 2 )
INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
VALUES (2,'User2','UserInfo2')
4

1 に答える 1

0

何らかのタイプの戻り値を取得することだけが必要な場合は、関数またはストアド プロシージャを使用して値を返します。例えば、

IF EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 1 )
   Return -1
Else
   INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
   VALUES (1,'User','UserInfo')

IF EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 2 )
   Return -2
Else
   INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
   VALUES (2,'User2','UserInfo2')

アドホック クエリまたは SSMS のクエリ ウィンドウのみを使用する場合は、その上に変数を作成するか、単にメッセージを出力します。コード化された SQL クエリで変数を使用すると、戻り値を取得できます。

Declare @ErrorValues int;
Select @ErrorValues = 0;

IF EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 1 )
 BEGIN
   Select @ErrorValues = @ErrorValues - 1;
   PRINT '-1';
Else
   INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
   VALUES (1,'User','UserInfo')

IF EXISTS ( SELECT 1 FROM TBL_AUDIT_LOG_TYPE WHERE AUDIT_LOG_TYPE_ID = 2 )
 BEGIN
   Select @ErrorValues = @ErrorValues - 2;
   Print '-2'; --or PRINT 'audit_log_type_ID of 2 already exists';
 END
Else
   INSERT INTO TBL_AUDIT_LOG_TYPE ([AUDIT_LOG_TYPE_ID],[MODULE],[ACTION]) 
   VALUES (2,'User2','UserInfo2')
于 2013-04-24T05:54:38.737 に答える