Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Passage du paramètre de type 'objet' dans le paramètre table pour la colonne sql_variant

Ce message date de plusieurs années maintenant, mais j'ai rencontré le même problème et j'ai une solution. Si vous n'utilisez pas un DataTable mais remplissez plutôt une collection de SqlDataRecord, vous pouvez définir le type de données du SqlDataRecord sur 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;