Sql server 如何在多线程应用程序中避免重复记录?
我有多个线程生成数据并将它们存储到数据库中。生成的数据可以复制。我不想在数据库中重复。我目前的解决方案是在C#代码中使用锁来强制多个线程同步写入DB。i、 e.每个线程检查其数据是否已存在于数据库中,并仅存储新数据。但这似乎损害了表演。有没有更好的解决办法?也许让数据库来处理复制Sql server 如何在多线程应用程序中避免重复记录?,sql-server,multithreading,sql-server-2008-r2,Sql Server,Multithreading,Sql Server 2008 R2,我有多个线程生成数据并将它们存储到数据库中。生成的数据可以复制。我不想在数据库中重复。我目前的解决方案是在C#代码中使用锁来强制多个线程同步写入DB。i、 e.每个线程检查其数据是否已存在于数据库中,并仅存储新数据。但这似乎损害了表演。有没有更好的解决办法?也许让数据库来处理复制 我使用的是SQL Server 2008 R2。您可以使用唯一索引和约束来防止数据库中的重复。发生重复应用时,您可以处理异常 如果有一个唯一的键来标识每一行,那么可以在表上设置一个唯一的约束来防止重复。它使用索引来检查
我使用的是SQL Server 2008 R2。您可以使用唯一索引和约束来防止数据库中的重复。发生重复应用时,您可以处理异常 如果有一个唯一的键来标识每一行,那么可以在表上设置一个唯一的约束来防止重复。它使用索引来检查唯一性,因此它应该是有效的 此外,SQLServer可以向客户端应用程序中的C代码返回一条错误消息,让他们知道违反了约束 根据其他信息进行编辑: --如果您的唯一列超过900字节,请尝试基于触发器的解决方案或唯一列的MD5(仅64字节),并基于MD5列创建唯一约束。您可以使用计算列来实现此功能
ALTER TABLE dbo.LookupValues ADD bigColumnhash AS
HASHBYTES('SHA2_512', bigColumn) PERSISTED;
GO
CREATE UNIQUE NONCLUSTERED INDEX ix_LookupValues_bigColumnhash
on dbo.LookupValues (bigColumnhash) INCLUDE (bigColumn);
GO
我试图添加唯一的约束。但该列的长度为2000,超过了索引列的900限制。您可以创建唯一约束而不是索引。您还可以将长列拆分为多个短类型列。您不是第一个遇到此问题的人。请参阅以获取丰富的策略。