使用C#:在SQL数据库表的字段(主键)中插入多个值(不唯一)?

时间:2012-05-11 13:54:52

标签: database c#-4.0 insert sql-server-2008-r2

我在SQL数据库中有一个表,它有两个字段 Random (主键而非null)和 Count (Identity增加1)。我必须在Random字段中插入十亿条记录。我能够一次插入1000行,因为这是SQL Insert语句可以处理的最大值(在使用ADO.NET的C#控制台应用程序中)。

我想要插入的数据是随机的但不是唯一的。所以,我一直得到例外"违反主键...."。正在删除所有1000行,而不是只删除重复的值。

是否可以通过仅删除重复值而不是插入语句中的所有记录(在我的情况下为1000)来插入唯一值?

我也尝试使用DataTable和SQLBulkCopy来插入值但没有成功。

示例场景:TableA

随机计数

100 1

101 2

插入(随机)TableA值(102),(103),(100),(104),(105),(101)

100和101是重复值。有没有办法只删除这些值(100,101)并插入所有其他值(102,103,104,105)? (在我的程序中,由于主键违规而丢弃了所有值)

对此非常感谢。

由于

1 个答案:

答案 0 :(得分:0)

您可以尝试使用IGNORE_DUP_KEY标志。从Random中删除PrimaryKey并添加UNIQUE约束,如下所示:

 ALTER TABLE dbo.TableA
   ADD CONSTRAINT UniqueRandomValue
   UNIQUE (Random) WITH (IGNORE_DUP_KEY = ON);

SQL server - stored procedure - ignore exception

另一种选择是编写自己的逻辑来避免或处理冲突。我建议对这种情况使用存储过程,以防止重复的数据库连接。发送一批数据作为参数,并在存储过程中逐个插入,忽略冲突。小心限制批量大小以避免连接超时。动态减小批量大小证明对于从数据大小导致的超时反弹非常有用。

BEGIN TRY
INSERT INTO TableA(Random) VALUES(@val);
END TRY
BEGIN CATCH
END CATCH;