我使用以下模式将一个TempTable传递给SQLCLR代码
-临时表的模式
CREATE TABLE ##temp_table_configurationXml_local (
[OrchConfigXML] [xml]
)SQLCLR代码:
DataTable dt = new DataTable(tableToUse); // tableToUse is the temp table from SQL
dt.Columns.Add("OrchConfigXML", typeof(SqlXml));
DataRow dr = dt.NewRow();
dr["orchConfigXML"] = xmlToUse; // This is type of SqlXML and has valid XML in it
dataTableToUse.Rows.Add(dr);
// Write Data
// auto-disposable bulk copy operation
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.DestinationTableName = destTable;
bulkCopy.ColumnMappings.Add(new
SqlBulkCopyColumnMapping("OrchConfigXML", "OrchConfigXML"));
// Bulk copy operation will drain memory so it is better to setup a batchsize.
bulkCopy.BatchSize = 50000;
bulkCopy.WriteToServer(dt);
conn.Close(); //Close the SQL Connection.
}在执行SQL脚本和调试SQLCLR代码时,我在C#/SQLCLR中出现了一个错误。
The given ColumnMapping does not match up with any column in the source or destination.如何将SQLXML映射到SQLXML数据类型。
发布于 2017-04-12 19:34:41
问题:
destTable中有多少列?如果只有一个,那么您一开始就不需要SqlBulkCopyColumnMapping。
(回答:“destTable中只有一列”)SqlBulkCopy?##temp_table_configurationXml_local中将有多少行?如果只有一个,那么通过SqlXml输入参数传递值可能更好。xmlToUse作为另一行添加到##temp_table_configurationXml_local中的任何内容中?这似乎是一个奇怪和/或复杂的设置。要尝试/考虑的事情:
DataTable中的列定义,您可能希望尝试使用SqlDbType.Xml而不是SqlXml。SqlXml用于SQLCLR对象返回的输入/输出参数、返回类型和结果集字段。https://stackoverflow.com/questions/43370699
复制相似问题