我需要UNIQUE通过我正在开发的C#应用程序以特殊方式捕获对约束的违反.可以安全地假设它Error 2627总是对应于这种违规行为,以便我可以使用
if (ThisSqlException.Number == 2627)
{
// Handle unique constraint violation.
}
else
{
// Handle the remaing errors.
}
Run Code Online (Sandbox Code Playgroud)
?
互联网上有很多关于这个常见"问题"的信息.
解决方案如:
IF NOT EXISTS() BEGIN INSERT INTO (...) END
Run Code Online (Sandbox Code Playgroud)
在我看来并不是线程安全的,你可能会同意.
但是你能否确认将exists存入一个select的where子句会解决sql引擎中最高并发性的问题?够了吗?
insert into Table (columns)
select column1, column2, column3
where not exists (select top 1 1 from Table where something)
Run Code Online (Sandbox Code Playgroud)
应该在那里还添加了一些更高的事务级别,还是可以在默认的一个上执行:commit?
这会在未提交的水平下工作吗?
谢谢!
//稍后添加
我可以假设两个sql'都是正确的:
1)设置事务隔离级别可重复读取
IF NOT EXISTS() BEGIN INSERT INTO (...) END
Run Code Online (Sandbox Code Playgroud)
2)设置事务隔离级别可重复读取
insert into Table (columns)
select column1, column2, column3
where not exists (select top 1 1 from Table where something)
Run Code Online (Sandbox Code Playgroud)