如何设置SQL Server数据表插入和自动增量列

时间:2015-10-29 16:07:51

标签: c# sql-server sql-server-2008 datatable

我使用DataTableSqlBulkCopy将数据插入SQL Server数据库表。

我已设法使用以下设置批量插入行,但仅使用负值,否则因为值不唯一而出现冲突:

DataTable table = new DataTable();
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 0;
column.AutoIncrementStep = -1;
table.Columns.Add(column);
table.Columns.Add(DB_Base.DBTable_Start, typeof(DateTime));

我有一个生成要插入的行的循环:

table.Rows.Add(null,tsoOptions.start);

然后我设置表和连接并使用WriteToServer()方法写入数据。这一切都正常,行显示但负自动增量主键。

如何对其进行修改以使其附加一个正值的行,该值在最后一个(MAX)值之后继续,而不会在单独的查询中读取最大值?

2 个答案:

答案 0 :(得分:4)

假设您的数据库表已正确创建且列自动增量(即IDENTITY)已打开,请勿在代码中复制此功能。只需将记录发送到具有该列的null值的数据库,数据库就可以完成其工作。注释掉这些行并尝试:

//column.AutoIncrement = true;
//column.AutoIncrementSeed = 0;
//column.AutoIncrementStep = -1;

<强>更新 实际上,最好的方法是不完全映射标识列,因此请注释掉所有这些行:

//DataColumn column = new DataColumn();
//column.DataType = System.Type.GetType("System.Int32");
//column.AutoIncrement = true;
//column.AutoIncrementSeed = 0;
//column.AutoIncrementStep = -1;
//table.Columns.Add(column);
//table.Columns.Add(DB_Base.DBTable_Start, typeof(DateTime));

并确保您没有使用SqlBulkCopyOptions.KeepIdentitycheck this)。

答案 1 :(得分:0)

您需要在DataTable对象中设置它吗?通常我会继续使用SSMS(Sql Server Management Studio)并将主键设置为Identity和Increment。 当我保存在数据库中时,我只是没有为此列发送任何内容:

1)右键单击左侧SSMS树中的表,选择设计 enter image description here

2)单击您的主键列并查看“列属性”部分,您应该设置如下: enter image description here

那应该做的工作!

更新:与此处建议的其他人一样,请注释您尝试设置种子和身份的代码行,而不是在SSMS中执行此操作。