2017-04-12 9 views
0

列マッピング私は、次のスキーマを使用した私のSQLCLRコードにTempTableのを渡しています

- 一時テーブルのスキーマ

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. 

SQL XMLデータ型にSQLXMLをマップする方法。

+1

'destTable'にはいくつのカラムがありますか? 1の場合、最初に 'SqlBulkCopyColumnMapping'は必要ありません。また、私は覚えていないが、マッピングの列名を使用すると大文字と小文字が区別され、 "** O ** rchConfigXML"が列を定義したときに "** o ** rchConfigXML"マッピング。また、 'dt'がどこに作成されているのか分かりますが、' dataTableToUse'は作成されていません。また、あなたは最終的に何をしようとしていますか、なぜあなたは 'SqlBulkCopy'を使用していますか? –

+0

はい、大文字と小文字が区別されます。 OrchConfigXMLの名前を更新しました。次のエラーが発生しました。 'System.Data.SqlTypes.SqlXml'型のオブジェクトをキャストできません。 'System.String'を入力してください。 – Abe

+0

1)destTableには1つの列しかありません。 2)この列のテキストはXMLであり、SQLBulkCopyを使用すると膨大なものになる可能性があります。私は自分のコードを変更して幸せです 3)私の質問で私のコードを更新しましたが、私はいくつかの方法がありますが、簡単にするために私の質問にコードをマージしました。 – Abe

答えて

0

質問:

  1. destTableにどのように多くの列がありますか?ただ1つの場合、最初にSqlBulkCopyColumnMappingは必要ありません。

    (答え:「destTableで唯一の列があります」)

  2. あなたが最終的に行うために何をしようとしている、そしてなぜあなたはSqlBulkCopyを使用していますか?

  3. ##temp_table_configurationXml_localの行数はいくつですか?ただ1つの場合は、SqlXmlの入力パラメータで値を渡す方が良いかもしれません。

  4. xmlToUseは、別の行として、##temp_table_configurationXml_localに追加されていますか?これは、奇妙なおよび/または複雑な設定のようです。

考える/しようとするもの:

  1. 私は覚えていないことが、マッピングのために列名を使用すると、大文字と小文字が区別であるかもしれない、としたとき、あなたは「O rchConfigXML」を持っています列を定義しましたが、列マッピングでは "o rchConfigXML"です。

  2. DataTableの列定義では、SqlXmlの代わりにSqlDbType.Xmlを使用するとよいでしょう。 SqlXmlは、入出力パラメータ、戻り値の型、およびSQLCLRオブジェクトから返される結果セットのフィールドに使用されます。

関連する問題