如果不存在记录检查

时间:2013-04-24 02:34:22

标签: mysql sql

我正在努力尝试如果我的数据库没有记录,然后插入它,下面的查询是我的检查,代码没有错误,所以我不确定我是否真的进行检查?

记录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')

1 个答案:

答案 0 :(得分: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中使用adhoc查询或查询窗口,请在其上方创建变量或仅打印消息。如果使用带有编码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')