2017-04-12 121 views
0

我傳遞一個不是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

回答

0

問題:

  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對象返回的輸入/輸出參數,返回類型和結果集字段。