Partilhar via


Arquivos de formato XML (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

O SQL Server fornece um esquema XML que define a sintaxe para escrever arquivos de formato XML a serem usados na importação em massa de dados para uma tabela do SQL Server. Os arquivos de formato XML devem aderir a esse esquema, que é definido no XSDL (XML Schema Definition Language). Os arquivos de formato XML só são suportados quando as ferramentas do SQL Server são instaladas junto com o SQL Server Native Client.

Você pode usar um arquivo de formato XML com um comando bcp, BULK INSERT instrução ou INSERT ... SELECT * FROM OPENROWSET(BULK...) instrução. O comando bcp permite gerar automaticamente um arquivo de formato XML para uma tabela; Para obter mais informações, consulte Utilitário bcp.

Dois tipos de arquivos de formato são suportados para exportação e importação em massa: arquivos de formato não XML e arquivos de formato XML. Os arquivos de formato XML fornecem uma alternativa flexível e poderosa aos arquivos de formato não-XML. Para obter informações sobre arquivos de formato não XML, consulte Usar arquivos de formato não XML (SQL Server).

Observação

Esta sintaxe, incluindo a inserção em massa, não é suportada no Azure Synapse Analytics. No Azure Synapse Analytics e em outras integrações de plataforma de banco de dados em nuvem, realize a movimentação de dados por meio da instrução COPY no Azure Data Factory ou usando instruções T-SQL, como COPY INTO e PolyBase..

Benefícios dos arquivos de formato XML

Os arquivos de formato XML são autodescritos, tornando-os fáceis de ler, criar e ampliar. Eles são legíveis por humanos, facilitando a compreensão de como os dados são interpretados durante operações em massa.

Os arquivos de formato XML contêm os tipos de dados das colunas de destino. A codificação XML descreve claramente os tipos de dados e elementos de dados do arquivo de dados e também o mapeamento entre elementos de dados e colunas de tabela.

Isso permite a separação entre como os dados são representados no arquivo de dados e qual tipo de dados está associado a cada campo no arquivo. Por exemplo, se um arquivo de dados contiver uma representação de caracteres dos dados, o tipo de coluna SQL correspondente será perdido.

Um arquivo de formato XML permite o carregamento de um campo que contém um único tipo de dados de objeto grande (LOB) de um arquivo de dados.

Um arquivo de formato XML pode ser aprimorado, mas permanecer compatível com suas versões anteriores. Além disso, a clareza da codificação XML facilita a criação de arquivos de vários formatos para um determinado arquivo de dados. Isso é útil se você tiver que mapear todos ou alguns dos campos de dados para colunas em diferentes tabelas ou exibições.

A sintaxe XML é independente da direção da operação; ou seja, a sintaxe é a mesma para exportação e importação em massa.

Você pode usar arquivos de formato XML para importar dados em massa para tabelas ou exibições não particionadas e para exportar dados em massa.

Para a função OPENROWSET(BULK...), especificar uma tabela de destino é opcional. Isso ocorre porque a função depende do arquivo de formato XML para ler dados de um arquivo de dados.

Observação

Uma tabela de destino é necessária com o comando bcp e a BULK INSERT instrução, que usa as colunas da tabela de destino para fazer a conversão de tipo.

Estrutura de arquivos de formato XML

Como um arquivo de formato não-XML, um arquivo de formato XML define o formato e a estrutura dos campos de dados em um arquivo de dados e mapeia esses campos de dados para colunas em uma única tabela de destino.

Um arquivo em formato XML possui dois componentes principais, <RECORD> e <ROW>.

  • <RECORD> descreve os dados à medida que são armazenados no ficheiro de dados.

    Cada <RECORD> elemento contém um conjunto de um ou mais <FIELD> elementos. Estes elementos correspondem a campos no ficheiro de dados. A sintaxe básica é a seguinte:

    <RECORD>
        <FIELD .../> [ ...n ]
    </RECORD>
    

    Cada <FIELD> elemento descreve o conteúdo de um campo de dados específico. Um campo só pode ser mapeado para uma coluna na tabela. Nem todos os campos precisam ser mapeados para colunas.

    Um campo em um arquivo de dados pode ser de comprimento fixo/variável ou de caractere terminado. Um valor de campo pode ser representado como: um caractere (usando representação de byte único), um caractere largo (usando representação Unicode de 2 bytes), formato de banco de dados nativo ou um nome de arquivo. Se um valor de campo for representado como um nome de arquivo, o nome do arquivo apontará para o arquivo que contém o valor de uma coluna BLOB na tabela de destino.

  • <ROW> descreve como construir linhas de dados de um arquivo de dados quando os dados do arquivo são importados para uma tabela do SQL Server.

    Um <ROW> elemento contém um conjunto de <COLUMN> elementos. Estes elementos correspondem a colunas de tabela. A sintaxe básica é a seguinte:

    <ROW>
        <COLUMN .../> [ ...n ]
    </ROW>
    

    Cada <COLUMN> elemento pode ser mapeado para apenas um campo no arquivo de dados. A ordem dos <COLUMN> elementos no <ROW> elemento define a ordem na qual a operação em massa os retorna. O arquivo de formato XML atribui a cada <COLUMN> elemento um nome local que não tem relação com a coluna na tabela de destino de uma operação de importação em massa.

Sintaxe de esquema para arquivos de formato XML

Esta seção contém um resumo dos elementos e atributos do esquema XML para arquivos de formato XML. A sintaxe de um arquivo de formato é independente da direção da operação; ou seja, a sintaxe é a mesma para exportação e importação em massa. Esta seção também considera como a importação em massa usa os <ROW> elementos e <COLUMN> e como colocar o xsi:type valor de um elemento em um conjunto de dados.

Para ver como a sintaxe corresponde aos arquivos de formato XML reais, consulte Arquivos de formato XML de exemplo.

Observação

Você pode modificar um arquivo de formato para permitir a importação em massa de um arquivo de dados no qual o número e/ou a ordem dos campos diferem do número e/ou da ordem das colunas da tabela. Para obter mais informações, consulte Formatar arquivos para importar ou exportar dados (SQL Server).

Sintaxe básica do esquema XML

Essas instruções de sintaxe mostram apenas os elementos (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>, e <COLUMN>) e seus atributos básicos.

Observação

Atributos adicionais associados ao valor do xsi:type num elemento <FIELD> ou <COLUMN> são descritos posteriormente neste artigo.

Elementos do esquema

Esta seção resume a finalidade de cada elemento que o esquema XML define para arquivos de formato XML. Os atributos são descritos em seções separadas mais adiante neste artigo.

  • <BCPFORMAT>

    O elemento de arquivo de formato que define a estrutura de registro de um determinado arquivo de dados e sua correspondência com as colunas de uma linha de tabela na tabela.

  • <RECORD .../>

    Define um elemento complexo contendo um ou mais <FIELD> elementos. A ordem em que os campos são declarados no arquivo de formato é a ordem em que esses campos aparecem no arquivo de dados.

  • <FIELD .../>

    Define um campo no arquivo de dados, que contém dados. Os atributos desse elemento são discutidos em Atributos do <FIELD> elemento , mais adiante neste artigo.

  • <ROW .../>

    Define um elemento complexo contendo um ou mais <COLUMN> elementos. A ordem dos <COLUMN> elementos é independente da ordem dos <FIELD> elementos de uma RECORD definição. Em vez disso, a <COLUMN> ordem dos elementos em um arquivo de formato determina a ordem das colunas do conjunto de linhas resultante. Os campos de dados são carregados na ordem em que os elementos correspondentes <COLUMN> são declarados no elemento <COLUMN>. Para obter mais informações, consulte Como a importação em massa usa o elemento <ROW>, mais adiante neste artigo.

  • <COLUMN>

    Define uma coluna como um elemento (<COLUMN>). Cada <COLUMN> elemento corresponde a um <FIELD> elemento (cuja ID é especificada no SOURCE atributo do <COLUMN> elemento ). Os atributos desse elemento são discutidos em Atributos do <COLUMN> elemento , mais adiante neste artigo. Consulte também Como a importação em massa utiliza o elemento <COLUMN> mais adiante neste artigo.

  • </BCPFORMAT>

    Necessário para finalizar o arquivo de formato.

Atributos do <FIELD> elemento

Esta seção descreve os <FIELD> atributos do elemento , que são resumidos na seguinte sintaxe de esquema:

<FIELD
ID ="fieldID"
xsi:type ="fieldType"
[ LENGTH ="n" ]
[ PREFIX_LENGTH ="p" ]
[ MAX_LENGTH ="m" ]
[ COLLATION ="collationName" ]
[ TERMINATOR ="terminator" ]
/>

Cada <FIELD> elemento é independente dos outros. Um campo é descrito em termos dos seguintes atributos:

Atributo FIELD Descrição Opcional /
Obrigatório
ID="fieldID" Especifica o nome lógico do campo no arquivo de dados. A ID de um campo é a chave usada para se referir ao campo.

<FIELD ID="fieldID" /> corresponde a <COLUMN SOURCE="fieldID" />
Obrigatório
xsi:type="fieldType" Esta é uma construção XML (usada como um atributo) que identifica o tipo da instância do elemento. O valor de fieldType determina quais dos atributos opcionais você precisa em uma determinada instância. Obrigatório (dependendo do tipo de dados)
COMPRIMENTO="n" Este atributo define o comprimento de uma instância de um tipo de dados de comprimento fixo.

O valor de n deve ser um número inteiro positivo.
Opcional, a menos que exigido pelo valor xsi:type
PREFIX_LENGTH="p" Este atributo define o comprimento do prefixo para uma representação de dados binários. O PREFIX_LENGTH, p, deve ser um dos seguintes valores: 1, 2, 4, ou 8. Opcional, a menos que exigido pelo valor xsi:type
MAX_LENGTH="m" Este atributo é o número máximo de bytes que podem ser armazenados em um determinado campo. Sem uma tabela de destino, o comprimento máximo da coluna não é conhecido. O MAX_LENGTH atributo restringe o comprimento máximo de uma coluna de caracteres de saída, limitando o armazenamento alocado para o valor da coluna. Isso é especialmente conveniente ao usar a função OPENROWSET com a opção BULK numa cláusula SELECT FROM.

O valor de m deve ser um número inteiro positivo. Por padrão, o comprimento máximo é de 8.000 caracteres para uma coluna char e 4.000 caracteres para uma coluna nchar .
Opcional
COLLATION="Nome da colação" COLLATION só é permitido para campos de caracteres. Para obter uma lista dos nomes de agrupamento do SQL Server, consulte Nome de agrupamento do SQL Server. Opcional
TERMINATOR="terminador" Este atributo especifica o terminador de um campo de dados. O terminador pode ser qualquer personagem. O terminador deve ser um caractere distinto que não está presente nos dados.

Por padrão, o terminador de campo é o caractere de tabulação (representado como \t). Para representar uma marca de parágrafo, use \r\n.
Este atributo é usado apenas com um xsi:type de dados de caracteres, o que exige este atributo.

  • xsi:type valores do <FIELD> elemento

    O xsi:type valor é uma construção XML (usada como um atributo) que identifica o tipo de dados de uma instância de um elemento. Para obter mais informações, consulte Colocar o valor xsi:type em uma seção de conjunto de dados neste artigo.

    O xsi:type valor do elemento suporta os <FIELD> seguintes tipos de dados.

    <FIELD> xsi:type valores Atributos XML necessários
    para o tipo de dados
    Atributos XML opcionais
    para o tipo de dados
    NativeFixed LENGTH Nenhum.
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    CharTerm TERMINATOR MAX_LENGTH, COLLATION
    NCharTerm TERMINATOR MAX_LENGTH, COLLATION

    Para obter mais informações sobre tipos de dados do SQL Server, consulte Tipos de dados.

  • Atributos do <COLUMN> elemento

    Esta seção descreve os <COLUMN> atributos do elemento , que são resumidos na seguinte sintaxe de esquema:

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    Um campo é mapeado para uma coluna na tabela de destino usando os seguintes atributos:

    Atributo COLUMN Descrição Opcional /
    Obrigatório
    SOURCE="ID de campo" Especifica a ID do campo que está sendo mapeado para a coluna.

    <COLUMN SOURCE=fieldID"/> mapeia para <FIELD ID=fieldID"/>
    Obrigatório
    NAME="nomedacoluna" Especifica o nome da coluna no conjunto de linhas representado pelo arquivo de formato. Esse nome de coluna é usado para identificar a coluna no conjunto de resultados e não precisa corresponder ao nome da coluna usado na tabela de destino. Obrigatório
    xsi:type="ColumnType" Esta é uma construção XML (usada como um atributo) que identifica o tipo de dados da instância do elemento. O valor de ColumnType determina quais dos atributos opcionais você precisa em uma determinada instância.

    Observação: Os valores possíveis de ColumnType e seus atributos associados são listados na <COLUMN> tabela de elementos nos valores xsi:type da <seção do elemento COLUMN>.
    Opcional
    COMPRIMENTO="n" Define o comprimento de uma instância de um tipo de dados de comprimento fixo. LENGTH é usado somente quando o xsi:type é um tipo de dados de cadeia de caracteres.

    O valor de n deve ser um número inteiro positivo.
    Opcional (disponível apenas se o xsi:type for um tipo de dados de cadeia de caracteres)
    PRECISÃO="n" Indica o número de dígitos em um número. Por exemplo, o número 123.45 tem uma precisão de 5.

    O valor deve ser um número inteiro positivo.
    Opcional (disponível apenas se o xsi:type for um tipo de dados de número variável)
    ESCALA="int" Indica o número de dígitos à direita da vírgula decimal de um número. Por exemplo, o número 123.45 tem uma escala de 2.

    O valor deve ser um inteiro.
    Opcional (disponível apenas se o xsi:type for um tipo de dados de número variável)
    NULLABLE={ "SIM" | "NÃO" } Indica se uma coluna pode assumir NULL valores. Este atributo é independente de FIELDS. No entanto, se uma coluna não for anulável e o campo especificar NULL (não especificando nenhum valor), resultará num erro em tempo de execução.

    O atributo NULLABLE é usado apenas se fizeres uma declaração simples SELECT FROM OPENROWSET(BULK...).
    Opcional (disponível para qualquer tipo de dados)

  • xsi:type valores do <COLUMN> elemento

    O xsi:type valor é uma construção XML (usada como um atributo) que identifica o tipo de dados de uma instância de um elemento. Para obter informações sobre como usar "Introdução do valor xsi:type num conjunto de dados", mais adiante nesta seção.

    O <COLUMN> elemento suporta tipos de dados SQL nativos, da seguinte maneira:

    Categoria de tipo <COLUMN> tipos de dados Atributos XML necessários
    para o tipo de dados
    Atributos XML opcionais
    para o tipo de dados
    Fixed SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT, e SQLUNIQUEID Nenhum. NULLABLE
    Número variável SQLDECIMAL e SQLNUMERIC Nenhum. NULLABLE, PRECISION, SCALE
    Data e hora variáveis SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET Nenhum. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXTe SQLUDT Nenhum. NULLABLE
    Caractere LOB SQLNTEXT Nenhum. NULLABLE
    String binária SQLBINARY e SQLVARYBIN Nenhum. NULLABLE, LENGTH
    Cadeia de caracteres SQLCHAR, SQLVARYCHAR, SQLNCHARe SQLNVARCHAR Nenhum. NULLABLE, LENGTH

    Importante

    Para exportar ou importar dados SQLXML em massa, use um dos seguintes tipos de dados em seu arquivo de formato: SQLCHAR ou SQLVARYCHAR (os dados são enviados na página de código do cliente ou na página de código implícita pelo agrupamento), SQLNCHAR ou SQLNVARCHAR (os dados são enviados como Unicode), ou SQLBINARY ou SQLVARYBIN (os dados são enviados sem qualquer conversão).

    Para obter mais informações sobre tipos de dados do SQL Server, consulte Tipos de dados.

Como a importação em massa usa o <ROW> elemento

O <ROW> elemento é ignorado em alguns contextos. Se o <ROW> elemento afeta uma operação de importação em massa depende de como a operação é executada:

  • O comando bcp

    Quando os dados são carregados em uma tabela de destino, o bcp ignora o <ROW> componente. Em vez disso, o bcp carrega os dados com base nos tipos de coluna da tabela de destino.

  • Transact-SQL instruções (BULK INSERT e OPENROWSET do provedor de conjunto de linhas em massa)

    Ao importar dados em massa para uma tabela, as instruções Transact-SQL usam o componente <ROW> para gerar o conjunto de linhas de entrada. Além disso, as instruções Transact-SQL executam conversões de tipo apropriadas com base nos tipos de coluna especificados em <ROW> e na coluna correspondente na tabela de destino. Se existir uma incompatibilidade entre os tipos de coluna, conforme especificado no arquivo de formato e na tabela de destino, ocorrerá uma conversão de tipo extra. Essa conversão de tipo extra pode levar a alguma discrepância (ou seja, uma perda de precisão) no comportamento do provedor de conjunto de linhas em massa de BULK INSERT ou OPENROWSET, em comparação com bcp.

    As informações no <ROW> elemento permitem que uma linha seja construída sem exigir qualquer informação adicional. Por esse motivo, você pode gerar um conjunto de linhas usando uma SELECT instrução (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    A OPENROWSET BULK cláusula requer um arquivo de formato. A conversão do tipo de dados do campo para o tipo de dados de uma coluna só está disponível com um arquivo de formato XML.

Como a importação em massa usa o <COLUMN> elemento

Para a importação em massa de dados para uma tabela, os <COLUMN> elementos em um arquivo de formato mapeiam um campo de arquivo de dados para colunas de tabela, especificando:

  • A posição de cada campo dentro de uma linha no arquivo de dados.

  • O tipo de coluna, que é usado para converter o tipo de dados de campo para o tipo de dados de coluna desejado.

Se nenhuma coluna for mapeada para um campo, o campo não será copiado para as linhas geradas. Esse comportamento permite que um arquivo de dados gere linhas com colunas diferentes (em tabelas diferentes).

Da mesma forma, para exportar dados em massa de uma tabela, cada <COLUMN> no arquivo de formato mapeia a coluna da linha da tabela de entrada para o seu campo correspondente no arquivo de dados de saída.

Coloque o xsi:type valor em um conjunto de dados

Quando um documento XML é validado por meio da linguagem XSD (XML Schema Definition), o xsi:type valor não é colocado no conjunto de dados. No entanto, você pode colocar as xsi:type informações no conjunto de dados carregando o arquivo de formato XML em um documento XML (por exemplo, myDoc), conforme ilustrado no seguinte trecho de código:

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for (int i = 0; i < ColumnList.Count; i++)
{
    Console.Write($"COLUMN: xsi:type={ColumnList[i].Attributes["type",
        "http://www.w3.org/2001/XMLSchema-instance"].Value}\n");
}

Arquivos de formato XML de exemplo

Esta seção contém informações sobre como usar arquivos de formato XML em vários casos, incluindo um exemplo da Adventure Works.

Observação

Nos arquivos de dados mostrados nos exemplos a seguir, <tab> indica um caractere de tabulação em um arquivo de dados e <return> indica um retorno de carro.

Os exemplos ilustram os principais aspetos do uso de arquivos de formato XML, da seguinte maneira:

Para obter informações sobre como criar arquivos de formato, consulte Criar um arquivo de formato com bcp (SQL Server).

Um. Ordenar os campos de dados de caracteres da mesma forma que as colunas da tabela

O exemplo a seguir mostra um arquivo de formato XML que descreve um arquivo de dados contendo três campos de dados de caracteres. O arquivo de formato mapeia o arquivo de dados para uma tabela que contém três colunas. Os campos de dados correspondem um-para-um com as colunas da tabela.

  • Tabela (linha):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Ficheiro de dados (registo):Age<tab>FirstName<tab>LastName<return>

O seguinte arquivo de formato XML lê do arquivo de dados para a tabela.

No elemento <RECORD>, o ficheiro de formato representa os valores dos dados em todos os três campos como dados de texto. Para cada campo, o TERMINATOR atributo indica o terminador que segue o valor de dados.

Os campos de dados correspondem um-para-um com as colunas da tabela. No elemento <ROW>, o ficheiro de formato mapeia a coluna Age ao primeiro campo, a coluna FirstName ao segundo campo e a coluna LastName ao terceiro campo.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Observação

Para obter um exemplo equivalenteAdventureWorks2025, consulte Criar um arquivo de formato com bcp (SQL Server).

B. Ordenar campos de dados e colunas de tabela de forma diferente

O exemplo a seguir mostra um arquivo de formato XML que descreve um arquivo de dados contendo três campos de dados de caracteres. O arquivo de formato mapeia o arquivo de dados para uma tabela que contém três colunas ordenadas de forma diferente dos campos do arquivo de dados.

  • Tabela (linha):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Ficheiro de dados (registo):Age<tab>FirstName<tab>LastName<return>

No elemento <RECORD>, o ficheiro de formato representa os valores dos dados em todos os três campos como dados de texto.

No elemento <ROW>, o ficheiro de formato mapeia a coluna Age para o primeiro campo, a coluna FirstName para o terceiro campo e a coluna LastName para o segundo campo.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Observação

Para obter um exemplo equivalenteAdventureWorks2025, consulte Usar um arquivo de formato para mapear colunas de tabela para campos de arquivo de dados (SQL Server).

C. Omitir um campo de dados

O exemplo a seguir mostra um arquivo de formato XML que descreve um arquivo de dados contendo quatro campos de dados de caracteres. O arquivo de formato mapeia o arquivo de dados para uma tabela que contém três colunas. O segundo campo de dados não corresponde a nenhuma coluna da tabela.

  • Tabela (linha):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Ficheiro de dados (registo):Age<tab>FirstName<tab>LastName<return>

No elemento <RECORD>, o ficheiro de formato representa os valores nos quatro campos como dados de texto. Para cada campo, o TERMINATOR atributo indica o terminador que segue o valor de dados.

No elemento <ROW>, o arquivo de formato mapeia a coluna Age para o primeiro campo, a coluna FirstName para o terceiro campo e a coluna LastName para o quarto campo.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="10"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Observação

Para obter um exemplo equivalenteAdventureWorks2025, consulte Usar um arquivo de formato para ignorar um campo de dados (SQL Server).

D. Mapa <FIELD> xsi:type para <COLUMN> xsi:type

O exemplo a seguir mostra diferentes tipos de campos e seus mapeamentos para colunas.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD xsi:type="CharTerm" ID="C1" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT" />
        <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR"
            LENGTH="16" NULLABLE="NO" />
        <COLUMN SOURCE="C3" NAME="LastName" />
        <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY" />
        <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE" />
        <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT" />
        <COLUMN SOURCE="C7" NAME="Interest" xsi:type="SQLDECIMAL"
            PRECISION="5" SCALE="3" />
    </ROW>
</BCPFORMAT>

E. Mapear dados XML para uma tabela

O exemplo a seguir cria uma tabela vazia de duas colunas (t_xml), na qual a primeira coluna mapeia para o tipo de dados int e a segunda coluna mapeia para o tipo de dados xml.

CREATE TABLE t_xml (c1 INT, c2 XML);

O seguinte arquivo de formato XML carregaria um arquivo de dados na tabela t_xml.

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="NativePrefix" PREFIX_LENGTH="1" />
        <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR" />
    </ROW>
</BCPFORMAT>

F. Importar campos de comprimento ou largura fixos

O exemplo a seguir descreve campos fixos de 10 ou 6 caracteres cada. O arquivo de formato representa esses comprimentos/larguras de campo como LENGTH="10" e LENGTH="6", respectivamente. Cada linha dos arquivos de dados termina com uma combinação de alimentação de linha de retorno de carro, <CR><LF>, que o arquivo de formato representa como TERMINATOR="\r\n".

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharFixed" LENGTH="10" />
        <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
    </ROW>
</BCPFORMAT>

Exemplos adicionais

Para obter mais exemplos de arquivos de formato não XML e arquivos de formato XML, consulte os seguintes artigos: