Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Passando parâmetro do tipo 'objeto' no parâmetro com valor de tabela para a coluna sql_variant


Este post já tem muitos anos, mas me deparei com o mesmo problema e tenho uma solução. Se você não usar um DataTable, mas preencher uma coleção de SqlDataRecord, poderá definir o tipo de dados do SqlDataRecord como SqlDbType.Variant.
 List<SqlDataRecord> dataTable = new List<SqlDataRecord>();
var dr = new SqlDataRecord(
                            new SqlMetaData("Id", SqlDbType.Int),
                            new SqlMetaData("Value", SqlDbType.Variant));

dr.SetInt32(0, id);
dr.SetValue(1, myObject);

dataTable.Add(dr);

[...]

SqlCommand sqlCommand = new SqlCommand("dbo.MyProc");
var structuredParam = sqlCommand.Parameters.Add("myTableParam", SqlDbType.Structured);
structuredParam.Value = dataTable;