sql中使用if-exists语句的问题

sql中使用if-exists语句的问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表,一个叫做TEMP,另一个叫做MAIN。所以我要做的就是检查TEMP表中的所有记录是否都在主表中。逻辑应该是temp表中的所有记录也必须在主表中,但是当我在这里运行sql查询时;它没有给我任何记录,我知道临时表的主表中缺少记录。我做错了什么 IF EXISTS(SELECT DISTINCT GRP_NM ,GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SE

我有两个表,一个叫做TEMP,另一个叫做MAIN。所以我要做的就是检查TEMP表中的所有记录是否都在主表中。逻辑应该是temp表中的所有记录也必须在主表中,但是当我在这里运行sql查询时;它没有给我任何记录,我知道临时表的主表中缺少记录。我做错了什么

IF EXISTS(SELECT DISTINCT GRP_NM
                 ,GRP_VAL 
          FROM TEMP 
          WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM  MAIN)
         )
  BEGIN 
   INSERT INTO  MAIN(GRP_NM, GRP_VAL )     
   SELECT GRP_NM
        ,GRP_VAL
  FROM  MAIN  
  WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM  MAIN)

  END

我怀疑你的问题与空值有关。如果两个表中的GRP_NM或GRP_VAL都为null,那么GRP_NM+GRP_VAL将为null,并且您的in和EXISTS语句将完全阻塞

在任何情况下,请尝试以下方法:

INSERT MAIN (GRP_NM, GRP_VAL)
 select GRP_NM, GRP_VAL
  from TEMP
 except select GRP_NM, GRP_VAL
  from MAIN

我怀疑你的问题与空值有关。如果两个表中的GRP_NM或GRP_VAL都为null,那么GRP_NM+GRP_VAL将为null,并且您的in和EXISTS语句将完全阻塞

在任何情况下,请尝试以下方法:

INSERT MAIN (GRP_NM, GRP_VAL)
 select GRP_NM, GRP_VAL
  from TEMP
 except select GRP_NM, GRP_VAL
  from MAIN

在代码的第二部分中,您试图从同一个MAIN表而不是TEMP表中插入值。也许只是打字错误。 试着这样做:

IF EXISTS(SELECT DISTINCT GRP_NM, GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM      + GRP_VAL FROM  MAIN))
   BEGIN 
INSERT INTO  MAIN(GRP_NM, GRP_VAL )     
SELECT GRP_NM, GRP_VAL FROM  TEMP 
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM  MAIN)

END

在代码的第二部分中,您试图从同一个MAIN表而不是TEMP表中插入值。也许只是打字错误。 试着这样做:

IF EXISTS(SELECT DISTINCT GRP_NM, GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM      + GRP_VAL FROM  MAIN))
   BEGIN 
INSERT INTO  MAIN(GRP_NM, GRP_VAL )     
SELECT GRP_NM, GRP_VAL FROM  TEMP 
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM  MAIN)

END

如果只从主部件运行SELECT GRP_NM,GRP_VAL,而GRP_NM+GRP_VAL不在SELECT GRP_NM+GRP_VAL中,会发生什么情况?您似乎也在重复相同的逻辑,我不确定您是否需要外部if exists。它不返回任何值,而且我知道几乎有28条记录丢失。当您仅从MAIN运行SELECT GRP_NM,GRP_VAL时会发生什么,其中GRP_NM+GRP_VAL不在SELECT GRP_NM+GRP_VAL FROM MAIN part中?你似乎也在重复同样的逻辑,我不确定您是否需要外部if。它不返回值,而且我知道几乎有28条记录丢失连接值的比较不是一个好主意:当'a'+'1'='a'+'1'时选择CASE,然后选择'TRUE'或'FALSE'结束。连接值的比较不是一个好主意:当'a'+'1'='a'时选择CASE“+”1“然后是“真”或“假”结束。