这可能是一个简单的问题,但我正在为一家公司做一些插入,并且一些插入“可能”已经存在。所以它会失败,因为主键值已经存在等等......
问题是.....其余的更新/插入会通过吗?还是整个事情都会失败?
有没有办法直接覆盖它,或者如果没有,则继续脚本的其余部分?
谢谢
这可能是一个简单的问题,但我正在为一家公司做一些插入,并且一些插入“可能”已经存在。所以它会失败,因为主键值已经存在等等......
问题是.....其余的更新/插入会通过吗?还是整个事情都会失败?
有没有办法直接覆盖它,或者如果没有,则继续脚本的其余部分?
谢谢
如果您正在执行基于集合的操作:
INSERT <foo>
SELECT <stuff>
然后操作是原子的——要么全部工作,要么都不工作(这是一件好事)。但是,如果您正在执行基于游标的单项插入,则插入失败可能不会中止批处理。但是,这非常慢。
您真正想要的是使用 MERGE 语句——假设您使用的是 sql server 2008 或更高版本。
或者,您可以在 INSERT 语句中添加 WHERE NOT EXISTS () 子句,以确保您不会尝试插入已经存在的行。
在这里阅读:http ://technet.microsoft.com/en-us/library/bb510625.aspx
您可以使用TRY/CATCH 块或在使用 INSERT 之前验证行是否已存在。