Sintaxe de esquema para arquivos de formato XML
Esta seção descreve a sintaxe de arquivos de formato XML. Para verificar como a sintaxe corresponde aos arquivos de formato XML atuais, consulte Arquivos de formato XML de exemplo. Esta seção também considera como a importação em massa usa os elementos <ROW> e <COLUMN> e como colocar o valor de xsi:type de um elemento em um conjunto de dados.
Você pode usar um arquivo de formato XML com um comando bcp, uma instrução BULK INSERT ou INSERT ... Instrução SELECT * FROM OPENROWSET(BULK...).
Observação |
---|
Você pode modificar um arquivo de formato para importar em massa de um arquivo de dados no qual o número e/ou a ordem dos campos difere do número e/ou da ordem das colunas na tabela. Para obter mais informações, consulte Usando um arquivo de formato para mapear campos para colunas durante a importação em massa. |
Sintaxe básica de esquema XML
Estas instruções de sintaxe mostram só os elementos (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>e <COLUMN>) e seus atributos básicos.
<BCPFORMAT...>
<RECORD>
<FIELD ID = "fieldID" xsi:type = "fieldType" [...]
/>
</RECORD>
<ROW>
<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]
/>
</ROW>
</BCPFORMAT>
Observação |
---|
Atributos adicionais associados ao valor de xsi:type em um elemento <FIELD> ou <COLUMN> são descritos posteriormente neste tópico. |
Descrição dos elementos de esquema
Esta seção resume a finalidade de cada elemento que o esquema XML define para os arquivos de formato XML. Os atributos são descritos em seções separadas posteriormente neste tópico.
<BCPFORMAT>
É o elemento de formato de arquivo que define a estrutura do registro de um determinado arquivo de dados e sua correspondência às colunas de uma linha de tabela na tabela.<RECORD .../>
Define um elemento complexo que contém um ou mais elementos <FIELD>. A ordem na qual os campos são declarados no arquivo de formato é a ordem na qual 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 elemento <FIELD>", posteriormente neste tópico.
<ROW .../>
Define um elemento complexo que contém um ou mais elementos <COLUMN>. A ordem dos elementos <COLUMN> é independente da ordem dos elementos <FIELD> em uma definição de RECORD. Ao contrário, a ordem dos elementos <COLUMN> em um arquivo de formato determina a ordem da coluna do conjunto de linhas resultante. Os campos de dados são carregados na ordem na qual 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>", posteriormente neste tópico.
<COLUMN>
Define uma coluna como um elemento (<COLUMN>). Cada elemento <COLUMN> corresponde a um elemento <FIELD> (cuja ID é especificada no atributo SOURCE do elemento <COLUMN>).Os atributos desse elemento são discutidos em "Atributos do elemento <COLUMN>", posteriormente neste tópico. Consulte também, "Como a importação em massa usa o elemento <COLUMN>", posteriormente neste tópico.
</BCPFORMAT>
Obrigatório para finalizar o arquivo de formato.
Atributos do elemento <FIELD>
Esta seção descreve os atributos do elemento <FIELD>, 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 elemento <FIELD> é 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 para fazer referência ao campo. <FIELD ID="fieldID"/> mapeia para <COLUMN SOURCE="fieldID"/> |
Obrigatório |
xsi:type ="fieldType" |
Essa é uma construção XML (usada como um atributo) que identifica o tipo da instância do elemento. O valor de fieldType determina de quais atributos opcionais (abaixo) você necessita em uma determinada instância. |
Obrigatório (dependendo do tipo de dados) |
LENGTH ="n" |
Esse atributo define o comprimento de uma instância de um tipo de dados de comprimento fixo. O valor de n deve ser um inteiro positivo. |
Opcional, a menos que exigido pelo valor de xsi:type |
PREFIX_LENGTH ="p" |
Esse atributo define o comprimento do prefixo para uma representação de dados binária. O valor PREFIX_LENGTH, p, deve ser um dos seguintes: 1, 2, 4 ou 8. |
Opcional, a menos que exigido pelo valor xsi:type |
MAX_LENGTH ="m" |
Esse atributo é o número máximo de bytes que pode ser armazenado em um determinado campo. Sem uma tabela de destino, o comprimento máximo da coluna é conhecido. O atributo MAX_LENGTH 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 opção BULK da função OPENROWSET em uma cláusula SELECT FROM. O valor de m deve ser um inteiro positivo. Por padrão, o comprimento máximo é 8.000 caracteres para uma coluna char e 4.000 caracteres para uma coluna nchar. |
Opcional |
COLLATION ="collationName" |
COLLATION só é permitido para campos de caracteres. Para uma lista dos nomes de agrupamentos SQL consulte Nome de agrupamento do SQL Server (Transact-SQL). |
Opcional |
TERMINATOR = "terminator" |
Esse atributo especifica o terminador de um campo de dados. O terminador pode ser qualquer caractere. O terminador deve ser um caractere exclusivo que não faça parte dos 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. |
Usado somente com um xsi:type de dados de caracteres, que requer esse atributo |
Valores de xsi:type do elemento <FIELD>
O valor de xsi:type é 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 o valor de xsi:type, consulte "Colocando o valor de xsi:type em um conjunto de dados", posteriormente nesta seção.
O valor de xsi:type do elemento <FIELD> oferece suporte aos tipos de dados a seguir.
Valores de xsi:type de <FIELD> |
Atributos XML obrigatórios para tipo de dados |
Atributos XML opcionais para 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 MicrosoftSQL Server, consulte Tipos de dados (Transact-SQL).
Atributos do elemento <COLUMN>
Esta seção descreve os atributos do elemento <COLUMN>, 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 ="fieldID" |
Especifica a ID do campo que é mapeado para a coluna. <COLUMN SOURCE="fieldID"/> mapeia para <FIELD ID="fieldID"/> |
Obrigatório |
NAME = "columnName" |
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" |
Essa é uma construção XML (usada como um atributo) que identifica o tipo de dados da instância do elemento. O valor de ColumnType determina de quais atributos opcionais (abaixo) você necessita em uma determinada instância.
Observação
Os possíveis valores de ColumnType e seus atributos associados são listados na próxima tabela.
|
Opcional |
LENGTH ="n" |
Define o comprimento de uma instância de um tipo de dados de comprimento fixo. LENGTH só é usado quando xsi:type é um tipo de dados de cadeia de caracteres. O valor de n deve ser um inteiro positivo. |
Opcional (disponível somente se xsi:type for um tipo de dados de cadeia de caracteres) |
PRECISION ="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 inteiro positivo. |
Opcional (disponível somente se xsi:type for um tipo de dados de número variável) |
SCALE ="int" |
Indica o número de dígitos à direita da casa decimal em um número. Por exemplo, o número 123,45 tem uma escala de 2. O valor deve ser um inteiro. |
Opcional (disponível somente se xsi:type for um tipo de dados de número variável) |
NULLABLE = { "YES" "NO" } |
Indica se uma coluna pode assumir valores NULL. Esse atributo é completamente independente de FIELDS. Entretanto, se uma coluna não for NULLABLE e campo especificar NULL (não especificando nenhum valor), ocorrerá erro em tempo de execução. O atributo NULLABLE é usado somente se você executar uma instrução SELECT FROM OPENROWSET(BULK...) simples. |
Opcional (disponível para qualquer tipo de dados) |
Valores de xsi:type do elemento <COLUMN>
O valor de xsi:type é 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 o valor de xsi:type, consulte "Colocando o valor de xsi:type em um conjunto de dados", posteriormente nesta seção.
O elemento <COLUMN> oferece suporte a tipos de dados SQL nativos, do seguinte modo:
Categoria do tipo |
Tipos de dados <COLUMN> |
Atributos XML obrigatórios para tipo de dados |
Atributos XML opcionais para tipo de dados |
---|---|---|---|
Fixo |
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 |
LOB |
SQLIMAGE, CharLOB, SQLTEXT e SQLUDT |
Nenhum. |
NULLABLE |
LOB caractere |
SQLNTEXT |
Nenhum. |
NULLABLE |
Cadeia de caracteres binária |
SQLBINARY e SQLVARYBIN |
Nenhum. |
NULLABLE, LENGTH |
Cadeia de caracteres |
SQLCHAR, SQLVARYCHAR, SQLNCHAR e SQLNVARCHAR |
Nenhum. |
NULLABLE, LENGTH |
Importante |
---|
Para importar ou exportar em massa dados SQLXML, use um dos seguinte tipos de dados em seu arquivo de formato: SQLCHAR ou SQLVARYCHAR (os dados são enviados na página de código cliente ou na página de código indicada pelo agrupamento), SQLNCHAR ou SQLNVARCHAR (os dados são enviados como Unicode) e 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 (Transact-SQL).
Como a importação em massa usa o elemento <ROW>
O elemento <ROW> é ignorado em alguns contextos. O elemento <ROW> afeta uma operação de importação em massa dependendo de como a operação é executada:
o comando bcp
Quando dados são carregados em uma tabela de destino, o bcp ignora o componente <ROW>. Em vez disso, o bcp carrega os dados com base nos tipos de coluna da tabela de destino.
Instruções Transact-SQL (BULK INSERT e o provedor de conjuntos de linhas em massa OPENROWSET)
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 houver uma incompatibilidade entre os tipos de coluna como especificado no arquivo de formato e na tabela de destino, ocorrerá uma conversão extra de tipo. Essa conversão extra de tipo pode conduzir a alguma discrepância (ou seja, uma perda de precisão) em comportamento no provedor de conjunto de linhas em massa do BULK INSERT ou OPENROWSET quando comparado ao bcp.
As informações no elemento <ROW> permitem construir uma linha sem a necessidade de qualquer informação adicional. Por isso, você pode gerar um conjunto de linhas com a instrução SELECT (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).
Observação A cláusula OPENROWSET BULK requer um arquivo de formato (observe que a conversão do tipo de dados de campo ao tipo de dados de uma coluna só é disponibilizada com um arquivo de formato XML).
Como a importação em massa usa o elemento <COLUMN>
Para importar dados em massa em uma tabela, os elementos <COLUMN> em um arquivo de formato mapeiam um campo de arquivo de dados para as colunas da tabela especificando:
A posição de cada campo dentro de uma linha no arquivo de dados.
O tipo de coluna usado para converter o tipo de dados de campo ao tipo de dados de coluna desejado.
Se nenhuma coluna for mapeada para um campo, o campo não será copiado na(s) linha(s) gerada(s). Esse comportamento permite que um arquivo de dados gere linhas com colunas diferentes (em tabelas diferentes).
Do mesmo modo, para exportar dados em massa de uma tabela, cada <COLUMN> no arquivo de formato mapeia a coluna da linha da tabela de entrada para seu campo correspondente no arquivo de dados de saída.
Colocando o valor de xsi:type em um conjunto de dados
Quando um documento XML é validado com a linguagem XSD (XML Schema Definition), o valor de xsi:type não é colocado no conjunto de dados. Porém, você pode colocar a informações de xsi:type no conjunto de dados carregando o arquivo de formato XML em um documento XML (por exemplo, myDoc), como ilustrado no fragmento de código seguinte:
...;
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");
}
Consulte também