列マッピング私は、次のスキーマを使用した私の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をマップする方法。
'destTable'にはいくつのカラムがありますか? 1の場合、最初に 'SqlBulkCopyColumnMapping'は必要ありません。また、私は覚えていないが、マッピングの列名を使用すると大文字と小文字が区別され、 "** O ** rchConfigXML"が列を定義したときに "** o ** rchConfigXML"マッピング。また、 'dt'がどこに作成されているのか分かりますが、' dataTableToUse'は作成されていません。また、あなたは最終的に何をしようとしていますか、なぜあなたは 'SqlBulkCopy'を使用していますか? –
はい、大文字と小文字が区別されます。 OrchConfigXMLの名前を更新しました。次のエラーが発生しました。 'System.Data.SqlTypes.SqlXml'型のオブジェクトをキャストできません。 'System.String'を入力してください。 – Abe
1)destTableには1つの列しかありません。 2)この列のテキストはXMLであり、SQLBulkCopyを使用すると膨大なものになる可能性があります。私は自分のコードを変更して幸せです 3)私の質問で私のコードを更新しましたが、私はいくつかの方法がありますが、簡単にするために私の質問にコードをマージしました。 – Abe