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

답변

0

질문 :

  1. destTable에 얼마나 많은 열이 있습니까? 단지 하나라면, 처음에는 SqlBulkCopyColumnMapping이 필요하지 않습니다.

    (답 : "하나의 열이 destTable에있다")

  2. 당신이 궁극적으로 일을하려고하는, 그리고 왜 당신이 SqlBulkCopy을 사용하고있는
  3. ?

  4. 행 수는 ##temp_table_configurationXml_local입니까? 하나만 입력하면 SqlXml 입력 매개 변수를 통해 값을 전달하는 것이 더 좋을 수 있습니다.

  5. xmlToUse은 다른 행으로 어떤 것이 든 ##temp_table_configurationXml_local에 추가됩니까? 이것은 홀수 및/또는 복잡한 설정처럼 보입니다.

    1. 내가 기억할 수 없지만 매핑 열 이름을 사용하는 경우를 구분, 당신은 "O rchConfigXML"있을 때를 :

    고려할/시도 열을 정의했지만 열 매핑에서 "o rchConfigXML"을 정의했습니다.

  6. DataTable에있는 열 정의의 경우 SqlXml 대신 SqlDbType.Xml을 사용해 볼 수 있습니다. SqlXml은 입출력 매개 변수, 리턴 유형 및 SQLCLR 오브젝트에 의해 리턴 된 결과 세트 필드에 사용됩니다.