有没有更有效/更安全的方法来检查记录是否存在然后插入

时间:2018-09-06 19:45:26

标签: c# sql sql-server

我有下面的代码,我想知道是否有一种更有效,更快捷的方法来进行此类缩放操作。这是一个监视程序,用于检查文件,如果没有在数据库中找到该记录,则将其插入。但是随着我们添加越来越多的目录来监视,我想知道性能问题。有没有一种更快的方法来检查,然后在一个sql命令中使用if(如果不存在)后接一个insert语句?感谢您的任何建议。

res/drawable

1 个答案:

答案 0 :(得分:1)

这是反模式的一个明显例子。

您不应通过搜索相似的行然后插入来强制唯一性,因为它总是会遇到多用户/多线程问题。您无法使其防错,并且始终是不安全的。另一个用户可以在支票和插入之间的毫秒内插入一行。

通过添加数据库约束来增强唯一性,如:

hchart(x4 ,"wordcloud", hcaes(name = "n1", weight = "n2"))

这样,数据库负责检查。

您的唯一性查询似乎基于两列:alter table [table].[dbo].[tablename] add constraint unique_row unique (col1, col2, col3, ... colN); Workflow_Step_Name。如果是这种情况,那么以下约束将满足您的需求:

File_Name

然后,您只需插入而无需预先检查:数据库将为您执行检查。如果已经有另一行具有完全相同的值,则alter table [table].[dbo].[tablename] add constraint unique_file_name unique (Workflow_Step_Name, File_Name); 将失败。

现在,如果您的应用程序是一个单用户应用程序,并且将一直存在,那么我猜您可以执行一个INSERT来检查是否没有与该文件完全相同的行,然后执行SELECT 。无论如何,在数据库级别添加约束要安全得多,以防您的程序出现错误时保护数据。