SQLCLR 中 SqlXml 类型的列映射到 SQL 表 Xml 列



我正在使用以下架构将 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 映射到 SQL XML 数据类型。

问题:

  1. destTable有多少列?如果只有一个,那么您首先不需要SqlBulkCopyColumnMapping

    (答案:"destTable 中只有一列")

  2. 最终想做什么,你为什么要使用SqlBulkCopy

  3. ##temp_table_configurationXml_local将有多少行?如果只有一个,则通过输入参数传入值可能会更好SqlXml

  4. xmlToUse是否被添加到##temp_table_configurationXml_local中的任何内容中,作为另一行?这似乎是一个奇怪和/或复杂的设置。

要尝试/考虑的事情:

  1. 我不记得了,但是使用列名进行映射可能区分大小写,并且在定义列时有">OrchConfigXML",但在列映射中有">orchConfigXML"。

  2. 对于DataTable中的列定义,您可能需要尝试使用SqlDbType.Xml而不是SqlXmlSqlXml用于 SQLCLR 对象返回的输入/输出参数、返回类型和结果集字段。

最新更新