bcp_moretext

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

긴 가변 길이 데이터 형식 값의 일부를 SQL Server로 보냅니다.

구문

  
RETCODE bcp_moretext (  
        HDBC hdbc,  
        DBINT cbData,  
        LPCBYTE pData);  

인수

hdbc
대량 복사 사용 ODBC 연결 핸들입니다.

cbData
pData에서 참조 하는 데이터에서 SQL Server로 복사되는 데이터의 바이트 수입니다. SQL_NULL_DATA 값은 NULL을 나타냅니다.

pData
SQL Server로 보낼 지원되는 긴 가변 길이 데이터 청크에 대한 포인터입니다.

반품

SUCCEED 또는 FAIL

설명

이 함수는 bcp_bind 및 bcp_sendrow 함께 사용하여 긴 가변 길이 데이터 값을 여러 개의 작은 청크로 SQL Server에 복사할 수 있습니다. bcp_moretext 텍스트, ntext, image, varchar(max), nvarchar(max), varbinary(max), UDT(사용자 정의 형식) 및 XML과 같은 SQL Server 데이터 형식이 있는 열과 함께 사용할 수 있습니다. 데이터 변환을 지원하지 않는 bcp_moretext 제공된 데이터는 대상 열의 데이터 형식과 일치해야 합니다.

bcp_moretext 지원하는 데이터 형식에 대해 NULL이 아닌 pData 매개 변수를 사용하여 bcp_bind 호출되는 경우 bcp_sendrow 길이에 관계없이 전체 데이터 값을 보냅니다. 그러나 bcp_bind 지원되는 데이터 형식에 대한 NULL pData 매개 변수가 있는 경우 bcp_moretext 데이터가 있는 바인딩된 열이 처리되었음을 나타내는 bcp_sendrow 성공적으로 반환된 직후 데이터를 복사하는 데 사용할 수 있습니다.

bcp_moretext 사용하여 지원되는 데이터 형식 열을 한 행에 보내는 경우 이 열을 사용하여 지원되는 다른 모든 데이터 형식 열을 행에 보내야 합니다. 열을 건너뛸 수 없습니다. 지원되는 데이터 형식은 SQLTEXT, SQLNTEXT, SQLIMAGE, SQLUDT 및 SQLXML입니다. 열이 각각 varchar(max), nvarchar(max) 또는 varbinary(max)인 경우 SQLCHARACTER, SQLVARCHAR, SQNCHAR, SQLBINARY 및 SQLVARBINARY도 이 범주에 속합니다.

bcp_bind 또는 bcp_collen 호출하면 SQL Server 열에 복사할 모든 데이터 파트의 총 길이가 설정됩니다. bcp_bind 또는 bcp_collen 호출에서 지정한 것보다 많은 바이트를 SQL Server에 보내려고 시도하면 오류가 발생합니다. 예를 들어 이 오류는 bcp_collen 사용하여 SQL Server 텍스트 열에 사용 가능한 데이터의 길이를 4500으로 설정한 다음, 각 호출에서 데이터 버퍼 길이가 1000바이트 길이임을 나타내는 동안 bcp_moretext 5번 호출된 애플리케이션에서 발생합니다.

복사된 행에 긴 가변 길이 열 이 두 개 이상 포함된 경우 bcp_moretext 먼저 데이터를 가장 낮은 서수 번호가 매겨진 열로 보낸 다음, 다음으로 낮은 서수로 번호가 매겨진 열로 보냅니다. 예상 데이터의 총 길이를 올바르게 설정하는 것이 중요합니다. 열에 대한 모든 데이터가 대량 복사를 통해 수신되었음을 길이 설정 외부에서 알릴 수 있는 방법은 없습니다.

var(max) 값이 bcp_sendrow 사용하여 서버로 전송되고 bcp_moretext 경우 열 길이를 설정하기 위해 bcp_collen 호출할 필요가 없습니다. 대신 이러한 형식에 대해서만 길이가 0인 bcp_sendrow 호출하여 값이 종료됩니다.

애플리케이션은 일반적으로 bcp_sendrow 호출하고 루프 내에서 bcp_moretext 여러 데이터 행을 보냅니다. 다음은 두 개의 텍스트 열이 포함된 테이블에 대해 이 작업을 수행하는 방법에 대한 개요입니다.

while (there are still rows to send)  
{  
bcp_sendrow(...);  
  
for (all the data in the first varbinary(max) column)  
bcp_moretext(...);  
bcp_moretext(hdbc, 0, NULL);  
  
for (all the data in the second varbinary(max) column)  
bcp_moretext(...);  
bcp_moretext(hdbc, 0, NULL);  
  
}  
  

이 예제에서는 bcp_bind 및 bcp_sendrow bcp_moretext 사용하는 방법을 보여줍니다.

// Variables like henv not specified.  
HDBC      hdbc;  
DBINT      idRow = 5;  
char*      pPart1 = "This text value isn't very long,";  
char*      pPart2 = " but it's broken into three parts";  
char*      pPart3 = " anyhow.";  
DBINT      cbAllParts;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, "comdb..articles", NULL, NULL, DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Bind program variables to table columns.   
if (bcp_bind(hdbc, (LPCBYTE) &idRow, 0, SQL_VARLEN_DATA, NULL, 0,  
   SQLINT4, 1)    == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
cbAllParts = (DBINT) (strnlen(pPart1, sizeof(pPart1) + 1) + strnlen(pPart2, sizeof(pPart2) + 1) + strnlen(pPart3, sizeof(pPart3) + 1));  
if (bcp_bind(hdbc, NULL, 0, cbAllParts, NULL, 0, SQLTEXT, 2) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Send this row, with the text value broken into three chunks.   
if (bcp_sendrow(hdbc) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
if (bcp_moretext(hdbc, (DBINT) strnlen(pPart1, sizeof(pPart1) + 1), pPart1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
if (bcp_moretext(hdbc, (DBINT) strnlen(pPart2, sizeof(pPart2) + 1), pPart2) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
if (bcp_moretext(hdbc, (DBINT) strnlen(pPart3, sizeof(pPart3) + 1), pPart3) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// All done. Get the number of rows processed (should be one).  
nRowsProcessed = bcp_done(hdbc);  
  
// Carry on.  

참고 항목

대량 복사 함수