Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Passaggio del parametro di tipo "oggetto" nel parametro con valori di tabella per la colonna sql_variant

Questo post ha molti anni ormai, ma ho riscontrato lo stesso problema e ho una soluzione. Se non si utilizza un DataTable ma si popola invece una raccolta di SqlDataRecord, è possibile impostare il tipo di dati di SqlDataRecord su 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;