컬럼 맵핑 나는 다음과 같은 스키마 내 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 스크립트를 실행하고 나는 C#을/SQLCLR에서 오류를 얻을 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에 단 하나의 열만 있습니다. 2)이 열의 텍스트는 XML이 될 수 있으므로 SQLBulkCopy를 사용하면 엄청날 수 있습니다. 사용하는 대안은 무엇입니까?난 내 코드를 수정 해 드리겠습니다 3) 내 질문에 내 코드를 업데이트했습니다. 몇 가지 방법이 있지만 단순함을 위해 제 질문에 코드를 병합했습니다. – Abe