Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在多线程应用程序中避免重复记录?_Sql Server_Multithreading_Sql Server 2008 R2 - Fatal编程技术网

Sql server 如何在多线程应用程序中避免重复记录?

Sql server 如何在多线程应用程序中避免重复记录?,sql-server,multithreading,sql-server-2008-r2,Sql Server,Multithreading,Sql Server 2008 R2,我有多个线程生成数据并将它们存储到数据库中。生成的数据可以复制。我不想在数据库中重复。我目前的解决方案是在C#代码中使用锁来强制多个线程同步写入DB。i、 e.每个线程检查其数据是否已存在于数据库中,并仅存储新数据。但这似乎损害了表演。有没有更好的解决办法?也许让数据库来处理复制 我使用的是SQL Server 2008 R2。您可以使用唯一索引和约束来防止数据库中的重复。发生重复应用时,您可以处理异常 如果有一个唯一的键来标识每一行,那么可以在表上设置一个唯一的约束来防止重复。它使用索引来检查

我有多个线程生成数据并将它们存储到数据库中。生成的数据可以复制。我不想在数据库中重复。我目前的解决方案是在C#代码中使用锁来强制多个线程同步写入DB。i、 e.每个线程检查其数据是否已存在于数据库中,并仅存储新数据。但这似乎损害了表演。有没有更好的解决办法?也许让数据库来处理复制


我使用的是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限制。您可以创建唯一约束而不是索引。您还可以将长列拆分为多个短类型列。您不是第一个遇到此问题的人。请参阅以获取丰富的策略。