1

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();

上記のコードはエラーをスローします。

テーブル変数では許可されていない ID 列への INSERT。
テーブル値パラメーター "@evaluatorList" のデータは、パラメーターのテーブル型に準拠していません。

4

1 に答える 1

0

SQLでID列を手動で設定することはできません。

SQLで主キー列を次のように定義します。

id1 UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY

次のコード行を削除します。

dataTable.Columns.Add("id1", typeof(Guid));

そして、vpTableGuid定義を変更して、id1列を含めないようにします。

于 2012-10-05T13:18:48.307 に答える