列映射在SQLCLR到SQL表XML列

问题描述:

我传递一个不是Temptable我SQLCLR代码与下面的模式列映射在SQLCLR到SQL表XML列

- 架构的临时表

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'中有多少列?如果只有1,那么你首先不需要'SqlBulkCopyColumnMapping'。另外,我不记得了,但是使用列名作为映射_might_区分大小写,并且在定义列时有“** O ** rchConfigXML”,但在列中有“** o ** rchConfigXML”映射。另外,我看到'dt'创建的地方,但不是'dataTableToUse'。另外,你最终想做什么,为什么你使用'SqlBulkCopy'? –

+0

是的,它是区分大小写的。我已将名称更新为OrchConfigXML,现在出现以下错误 无法将类型为“System.Data.SqlTypes.SqlXml”的对象转换为键入'System.String – Abe

+0

1)destTable中只有一列。 2)本专栏中的文本将是XML,并且可能很大,所以使用SQLBulkCopy,有什么替代方法?我很高兴修改我的代码 3)我更新了我的代码在我的问题中,我有几个方法,但为了简单起见,我在我的问题中合并了代码。 – Abe

问题:

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

    (回答:“世界上只有一个列destTable”)

  2. 什么是你最终要做的,为什么您使用SqlBulkCopy

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

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

观光尝试/考虑:

  1. 我不记得了,但使用的列名的映射可能是大小写敏感的,和你有“Ø rchConfigXML”当你定义列,但在列映射中定义了“ rchConfigXML”。

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