C# 表值参数
将TVP传递到存储过程时出错 我的代码是C# 表值参数,c#,sql-server,C#,Sql Server,将TVP传递到存储过程时出错 我的代码是 SqlConnection con=new SqlConnection(); con.Open(); SqlCommand cmd=new SqlCommand("SPName",con); DataTable dataTable = new DataTable("vpTableGuid"); dataTable.Columns.Add("id1", typeof(Guid)); dataTable.Columns.Add("rowNum", ty
SqlConnection con=new SqlConnection();
con.Open();
SqlCommand cmd=new SqlCommand("SPName",con);
DataTable dataTable = new DataTable("vpTableGuid");
dataTable.Columns.Add("id1", typeof(Guid));
dataTable.Columns.Add("rowNum", typeof(Int32));
dataTable.Rows.Add(Guid.NewGuid(),1);
dataTable.Rows.Add(Guid.NewGuid(),2);
dataTable.Rows.Add(Guid.NewGuid(),3);
SqlParameter param = new SqlParameter("@evaluatorList", dataTable);
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.vpTableGuid";
command.Parameters.Add(param);
command.ExecuteNonQuery();
上面的代码抛出一个错误:
不允许在表变量上插入标识列。表值参数“@evaluatorList”的数据不符合该参数的表类型
无法在SQL中手动设置标识列 在SQL中定义主键列,如下所示:
id1 UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY
删除这行代码:
dataTable.Columns.Add("id1", typeof(Guid));
并将您的vpTableGuid定义更改为不包含id1列。您也可以向我们展示存储过程的定义吗?显然,存储过程的期望值与您从C#调用它的方式之间存在差异……看起来您试图在作为标识的列中插入值。你的“id1”是什么类型的列?如果你也能显示
vpTableGuid
的定义,那会有帮助。你能提供你的表定义吗?它在抱怨一个IDENTITY
列。根据定义,这不能是uniqueidentifier
列,因此它不能抱怨id1
。啊,好主意。那太傻了。我想我们需要看看他的TVP定义,也许还有存储过程。