Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/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
C# 不允许在表变量上插入标识列_C#_Sql Server 2008 - Fatal编程技术网

C# 不允许在表变量上插入标识列

C# 不允许在表变量上插入标识列,c#,sql-server-2008,C#,Sql Server 2008,我正在从大型excel工作表导入数据并将其存储在stateTable中。现在我必须将这些数据推送到数据库表中。该表确实有一个标识列(1,1) 我在DB中创建了一个类似的表类型,以及一个将参数作为表类型插入到特定表中的过程。我还设置了标识插入 我的代码是: using (SqlCommand command = new SqlCommand("InsertStateTable") { CommandType = CommandType.StoredProcedure}) { Sql

我正在从大型excel工作表导入数据并将其存储在stateTable中。现在我必须将这些数据推送到数据库表中。该表确实有一个标识列(1,1)

我在DB中创建了一个类似的表类型,以及一个将参数作为表类型插入到特定表中的过程。我还设置了标识插入

我的代码是:

using (SqlCommand command = new SqlCommand("InsertStateTable") {
    CommandType = CommandType.StoredProcedure})
{
    SqlParameter param = command.Parameters.AddWithValue("@statetable", dt);
    param.TypeName = "StateTable";
    param.SqlDbType = SqlDbType.Structured;
    command.Connection = con;
    con.Open();
    command.ExecuteNonQuery();
    con.Close();
}
但出现的错误是 “不允许在表变量上插入标识列。” 我去过很多网站,但没有给出具体的原因


提前谢谢。

错误很明显:你不允许做你想做的事。基本上,您必须找到一种不依赖于将标识值插入表变量/表值参数的设计。我的建议是创建一个单独的表变量(与表值参数无关),它具有相同的数据,但没有
标识
列,因此

declare @foo table (id int not null, name nvarchar(200) not null /* etc */)
insert @foo (id, name /* etc */)
select id, name /* etc */ from @statetable
此时
@foo
具有原始数据,但没有标识列-然后您可以使用
@foo
执行任何操作


如果看不到您对标识插入所做的操作,则很难进一步评论。

您是如何“设置标识插入”的?你是说全球?由于每表语法不适用于表变量/表值参数…是否有其他方法将从excel工作表填充的数据表插入Sql Server数据库。@VeerB.Singh
SqlBulkCopy
?谢谢。它可以与Sqlbulkcopy一起工作。要插入标识键,必须使用SqlBulkCopyOptions.KeepIdentity