次のように定義された SQL Server 2012 のテーブル値パラメーターがあります。
CREATE TYPE [dbo].[TVP] AS TABLE (
[Id] [int] NOT NULL,
[FieldName] [nvarchar](100) NOT NULL,
[Value] [sql_variant] NOT NULL
)
おおよそ次のようなコードを使用して C# で呼び出します。
var mdItems = new DataTable();
mdItems.Columns.Add("Id", typeof(int));
mdItems.Columns.Add("FieldName", typeof(string));
mdItems.Columns.Add("Value", typeof(object));
mdItems.Rows.Add(new object[] {2, "blah", "value"}); //'value' is usually a string
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandText = "[WriteFieldValues]";
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@FieldValues", mdItems);
sqlCommand.ExecuteNonQuery();
ExecuteNonQuery
次に、呼び出し時に SQL Server から次のエラーが表示されます。
列「値」のタイプはサポートされていません。タイプは「オブジェクト」
マイクロソフトの既知のバグとして特定された 3 年前に、同じ問題に遭遇した人を見つけました。ただし、バグへのリンクは壊れています。バグのステータスまたは潜在的な回避策に関する最新情報があるかどうかを知っている人はいますか? 現状では、このバグは実際にsql_variant
フィールドの価値を殺しています。