我在SQL Server 2012的一個表值參數定義爲:在表值參數傳遞類型「對象」的參數爲SQL_VARIANT柱
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();
然後我得到從SQL Server以下錯誤的ExecuteNonQuery
電話:
不支持列'值'的類型。該類型是「對象」
我發現someone誰3年前遇到了同樣的問題,當它被確定爲一個已知的Microsoft錯誤。雖然,該錯誤的鏈接被打破。有誰知道是否有關於錯誤狀態或潛在解決方法的最新信息?就目前來看,這個bug確實會殺死sql_variant
字段的值。
@JonSeigel我已經添加了C#調用代碼。 – Dan
你選擇'sql_variant'的原因是什麼?只是好奇。 – codingbiz
@codingbiz該字段需要存儲字符串,日期和數字值。我可以在代碼中進行手動轉換,但這就是sql_variant應該爲我做的。 – Dan