【发布时间】:2014-02-24 09:19:53
【问题描述】:
是否可以吞下 INSERTS 的重复键违规异常,还是应该检查记录是否存在?
假设我有一张照片表,其中包含一个字段:PhotoName。我正在查看文件目录以将项目添加到 Photo。在此过程中,当我找到照片名称时,它可能已经在数据库中。所以有两种方法可以解决这个问题:
1) //Look to see if it exists before adding it. Only add it if it does not exist.
bool photoExists = SQLSELECTStatementToCheckIfThePhotoExists(photoName);
if(!photoExists)
SQLCommandToInsertPhoto(photoName)
or 2) //Assume that it doesn't exist. If it does, catch and ignore.
try
{
SQLCommandToInsertPhoto(photoName);
}
catch(DuplicateKeyException ex)
{
//swallow it and continue on as if nothing happened.
}
一方面,我不一定喜欢“吞下”异常的概念,但另一方面,try...catch 只使用一次对数据库的调用。这恰好在 SQL Server 中。
【问题讨论】:
-
您可能需要查看
MERGE,因为这将允许您匹配该键上的数据集,并且仅在不匹配的地方插入。 -
感谢您指出合并。假设一个人正在使用一个没有合并功能的 ORM?想法?
标签: sql sql-server exception-handling