如果Exists with Insert语句不会去Else部分

时间:2013-10-24 08:12:06

标签: sql-server tsql if-statement

我的SQL查询如下所示

if exists(select 1 from mytable2 T,mytable M where T.bookid=M.bookid)
 begin
  insert into books(col1,col2)
  select col1,col2 from library
 end

else
 begin
  insert into booknotfound 
  select col1,col2 from library
end

说Library是一个源表。只有当BookId出现在“mytable”中时我才会插入books表中,否则我想在“booknotfound”表中插入。上面的查询在books表中插入记录而不是在“booknotfound”表中。所以我想做的是我在为“mytable2”中的每条记录寻找bookid这样可能吗?

1 个答案:

答案 0 :(得分:2)

我认为你正在尝试做的事情比你写的/期望你写的更多。 (我猜)。

您要检查的不是每一行,而是所有书籍。请记住,SQL对数据SET(可以是单行或多行)进行操作。

所以你要做的就是问

如果返回1

select 1 from mytable2 T,mytable M where T.bookid=M.bookid

然后将Library中的所有元素插入Books。

如果返回0,则将库中的所有元素插入未找到的图书中。

我认为你要做的是做基于游标的操作(不可建议),或做两个不同的设定操作,如

INSERT col1, col2 INTO books FROM liberary WHERE <INSERT YOUR WHERE CLAUSE>
INSERT col1, col2 INTO booknotfound FROM liberary WHERE <INSERT YOUR WHERE CLAUSE>

你的WHERE子句的细节难以从你所写的内容中推断出来,因为我没有看到库与你的“mytable”和“mytable2”之间的任何联系 (你错过了一些信息吗?)

我的猜测是,你在mytable的图书馆里面的图书应该被找不到,图书馆里的图书应该放在书本里吗?