将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", 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();
上面的代码会抛出错误:
INSERT到表变量上不允许的标识列。
表值参数“@evaluatorList”的数据不符合参数的表类型。
答案 0 :(得分:0)
您无法在SQL中手动设置标识列。
在SQL中定义主键列:
id1 UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY
删除这行代码:
dataTable.Columns.Add("id1", typeof(Guid));
并将您的vpTableGuid定义更改为不包含id1列。