mam parametr wycenione tabela w SQL Server 2012 zdefiniowany jako:Przekazywanie parametru typu „obiektu” w parametrze wycenione tabela dla sql_variant kolumny
CREATE TYPE [dbo].[TVP] AS TABLE (
[Id] [int] NOT NULL,
[FieldName] [nvarchar](100) NOT NULL,
[Value] [sql_variant] NOT NULL
)
nazywam go w C# z kodem, który wygląda mniej więcej tak następujące:
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();
I wtedy pojawia się następujący błąd z SQL Server na wezwanie ExecuteNonQuery
:
Typ kolumny "Wartość" nie jest obsługiwany. Typ jest „Przedmiot”
znalazłem someone który napotkał ten sam problem 3 lata temu, kiedy został on zidentyfikowany jako znany Microsoft błędu. Jednak link do błędu jest zepsuty. Czy ktoś wie, czy istnieją aktualne informacje na temat statusu błędu lub potencjalnego obejścia? W obecnej wersji ten błąd naprawdę zabija wartość pól sql_variant
.
@JonSeigel Dodałem kod wywołujący C#. – Dan
z jakiego powodu wybrałeś 'sql_variant'? Po prostu ciekawy. – codingbiz
@ codingbiz W polu należy zapisać ciąg, datę i wartości numeryczne. Mogę wykonywać ręczne konwersje w kodzie, ale to właśnie powinien zrobić dla mnie sql_variant. – Dan