--- title: "Use a Format File to Map Table Columns to Data-File Fields (SQL Server) | Microsoft Docs" ms.custom: "" ms.date: "09/19/2016" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" ms.technology: - "dbe-bulk-import-export" ms.tgt_pltfrm: "" ms.topic: "article" helpviewer_keywords: - "mapping columns to fields during import [SQL Server]" - "format files [SQL Server], mapping columns to fields" ms.assetid: e7ee4f7e-24c4-4eb7-84d2-41e57ccc1ef1 caps.latest.revision: 40 author: "JennieHubbard" ms.author: "jhubbard" manager: "jhubbard" --- # Use a Format File to Map Table Columns to Data-File Fields (SQL Server) A data file can contain fields arranged in a different order from the corresponding columns in the table. This topic presents both non-XML and XML format files that have been modified to accommodate a data file whose fields are arranged in a different order from the table columns. The modified format file maps the data fields to their corresponding table columns. Please review [Create a Format File (SQL Server)](../../relational-databases/import-export/create-a-format-file-sql-server.md) for additional information. |Outline| |---| |[Example Test Conditions](#etc)
 ● [Sample Table](#sample_table)
 ● [Sample Data File](#sample_data_file)
[Creating the Format Files](#create_format_file)
 ● [Creating a Non-XML Format File](#nonxml_format_file)
 ● [Modifying the Non-XML Format File](#modify_nonxml_format_file)
 ● [Creating an XML Format File](#xml_format_file)
 ● [Modifying the XML Format File](#modify_xml_format_file)
[Importing Data with a Format File to Map Table Columns to Data-File Field](#import_data)
 ● [Using bcp and Non-XML Format File](#bcp_nonxml)
 ● [Using bcp and XML Format File](#bcp_xml)
 ● [Using BULK INSERT and Non-XML Format File](#bulk_nonxml)
 ● [Using BULK INSERT and XML Format File](#bulk_xml)
 ● [Using OPENROWSET(BULK...) and Non-XML Format File](#openrowset_nonxml)
 ● [Using OPENROWSET(BULK...) and XML Format File](#openrowset_xml)

| > [!NOTE] > Either a non-XML or XML format file can be used to bulk import a data file into the table by using a [bcp utility](../../tools/bcp-utility.md) command, [BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) statement, or INSERT ... SELECT * FROM [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md) statement. For more information, see [Use a Format File to Bulk Import Data (SQL Server)](../../relational-databases/import-export/use-a-format-file-to-bulk-import-data-sql-server.md). ## Example Test Conditions The examples of modified format files in this topic are based on the table and data file defined below. ### Sample Table The script below creates a test database and a table named `myRemap`. Execute the following Transact-SQL in Microsoft SQL Server Management Studio (SSMS): ```tsql CREATE DATABASE TestDatabase; GO USE TestDatabase; CREATE TABLE myRemap ( PersonID smallint, FirstName varchar(25), LastName varchar(30), Gender char(1) ); ``` ### Sample Data File The data below presents `FirstName` and `LastName` in the reverse order as presented in the table `myRemap`. Using Notepad, create an empty file `D:\BCP\myRemap.bcp` and insert the following data: ``` 1,Grosse,Anthony,M 2,Fatnowna,Alica,F 3,Rosenhain,Stella,F ``` ## Creating the Format Files To bulk import data from `myRemap.bcp` into the `myRemap` table, the format file must do the following: * Map the first data field to the first column, `PersonID`. * Map the second data field to the third column, `LastName`. * Map the third data field to the second column, `FirstName`. * Map the fourth data field to the fourth column, `Gender`. The simplest method to create the format file is by using the [bcp utility](../../tools/bcp-utility.md). First, create a base format file from the existing table. Second, modify the base format file to reflect the actual data file. ### Creating a Non-XML Format File Please review [Non-XML Format Files (SQL Server)](../../relational-databases/import-export/non-xml-format-files-sql-server.md) for detailed information. The following command will use the [bcp utility](../../tools/bcp-utility.md) to generate a non-xml format file, `myRemap.fmt`, based on the schema of `myRemap`. In addition, the qualifier `c` is used to specify character data, `t,` is used to specify a comma as a field terminator, and `T` is used to specify a trusted connection using integrated security. At a command prompt, enter the following command: ``` bcp TestDatabase.dbo.myRemap format nul -c -f D:\BCP\myRemap.fmt -t, -T ``` ### Modifying the Non-XML Format File See [Structure of Non-XML Format Files](../../relational-databases/import-export/non-xml-format-files-sql-server.md#Structure) for terminology. Open `D:\BCP\myRemap.fmt` in Notepad and perform the following modifications: 1) Re-arrange the order of the format-file rows so that the rows are in the same order as the data in `myRemap.bcp`. 2) Ensure the host file field order values are sequential. 3) Ensure there is a carriage return after the last format-file row. Compare the changes: **Before** ``` 13.0 4 1 SQLCHAR 0 7 "," 1 PersonID "" 2 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 30 "," 3 LastName SQL_Latin1_General_CP1_CI_AS 4 SQLCHAR 0 1 "\r\n" 4 Gender SQL_Latin1_General_CP1_CI_AS ``` **After** ``` 13.0 4 1 SQLCHAR 0 7 "," 1 PersonID "" 2 SQLCHAR 0 30 "," 3 LastName SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS 4 SQLCHAR 0 1 "\r\n" 4 Gender SQL_Latin1_General_CP1_CI_AS ``` The modified format file now reflects: * The first data field in `myRemap.bcp` is mapped to the first column, ` myRemap.. PersonID` * The second data field in `myRemap.bcp` is mapped to the third column, `myRemap.. LastName` * The third data field in `myRemap.bcp` is mapped to the second column, `myRemap.. FirstName` * The fourth data field in `myRemap.bcp` is mapped to the fourth column, ` myRemap.. Gender` ### Creating an XML Format File Please review [XML Format Files (SQL Server)](../../relational-databases/import-export/xml-format-files-sql-server.md) for detailed information. The following command will use the [bcp utility](../../tools/bcp-utility.md) to create an xml format file, `myRemap.xml`, based on the schema of `myRemap`. In addition, the qualifier `c` is used to specify character data, `t,` is used to specify a comma as a field terminator, and `T` is used to specify a trusted connection using integrated security. The `x` qualifier must be used to generate an XML-based format file. At a command prompt, enter the following command: ``` bcp TestDatabase.dbo.myRemap format nul -c -x -f D:\BCP\myRemap.xml -t, -T ``` ### Modifying the XML Format File See [Schema Syntax for XML Format Files](../../relational-databases/import-export/xml-format-files-sql-server.md#StructureOfXmlFFs) for terminology. Open `D:\BCP\myRemap.xml` in Notepad and perform the following modifications: 1) The order in which the \ elements are declared in the format file is the order in which those fields appear in the data file, thus reverse the order for the \ elements with ID attributes 2 and 3. 2) Ensure the \ ID attribute values are sequential. 3) The order of the \ elements in the \ element defines the order in which they are returned by the bulk operation. The XML format file assigns each \ element a local name that has no relationship to the column in the target table of a bulk import operation. The order of the \ elements is independent of the order of \ elements in a \ definition. Each \ element corresponds to a \ element (whose ID is specified in the SOURCE attribute of the \ element). Thus, the values for \ SOURCE are the only attributes that require revision. Reverse the order for \ SOURCE attributes 2 and 3. Compare the changes **Before** ``` \ \ \ \ \ \ \ \ \ \ ``` **After** ``` \ \ \ \ \ \ \ \ \ \ ``` The modified format file now reflects: * FIELD 1, which corresponds to COLUMN 1, is mapped to the first table column, `myRemap.. PersonID` * FIELD 2, which corresponds to COLUMN 2, is re-mapped to the third table column, `myRemap.. LastName` * FIELD 3, which corresponds to COLUMN 3, is re-mapped to the second table column, `myRemap.. FirstName` * FIELD 4, which corresponds to COLUMN 4, is mapped to the fourth table column, `myRemap.. Gender` ## Importing Data with a Format File to Map Table Columns to Data-File Field The examples below use the database, datafile, and format files created above. ### Using [bcp](../../tools/bcp-utility.md) and [Non-XML Format File](../../relational-databases/import-export/non-xml-format-files-sql-server.md) At a command prompt, enter the following command: ``` bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.fmt -T ``` ### Using [bcp](../../tools/bcp-utility.md) and [XML Format File](../../relational-databases/import-export/xml-format-files-sql-server.md) At a command prompt, enter the following command: ``` bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.xml -T ``` ### Using [BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) and [Non-XML Format File](../../relational-databases/import-export/non-xml-format-files-sql-server.md) Execute the following Transact-SQL in Microsoft SQL Server Management Studio (SSMS): ```tsql USE TestDatabase; GO TRUNCATE TABLE myRemap; BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp' WITH (FORMATFILE = 'D:\BCP\myRemap.fmt'); GO -- review results SELECT * FROM TestDatabase.dbo.myRemap; ``` ### Using [BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) and [XML Format File](../../relational-databases/import-export/xml-format-files-sql-server.md) Execute the following Transact-SQL in Microsoft SQL Server Management Studio (SSMS): ```tsql USE TestDatabase; GO TRUNCATE TABLE myRemap; BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp' WITH (FORMATFILE = 'D:\BCP\myRemap.xml'); GO -- review results SELECT * FROM TestDatabase.dbo.myRemap; ``` ### Using [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md) and [Non-XML Format File](../../relational-databases/import-export/non-xml-format-files-sql-server.md) Execute the following Transact-SQL in Microsoft SQL Server Management Studio (SSMS): ```tsql USE TestDatabase; GO TRUNCATE TABLE myRemap; INSERT INTO dbo.myRemap SELECT * FROM OPENROWSET ( BULK 'D:\BCP\myRemap.bcp', FORMATFILE = 'D:\BCP\myRemap.fmt' ) AS t1; GO -- review results SELECT * FROM TestDatabase.dbo.myRemap; ``` ### Using [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md) and [XML Format File](../../relational-databases/import-export/xml-format-files-sql-server.md) Execute the following Transact-SQL in Microsoft SQL Server Management Studio (SSMS): ```tsql USE TestDatabase; GO TRUNCATE TABLE myRemap; INSERT INTO dbo.myRemap SELECT * FROM OPENROWSET ( BULK 'D:\BCP\myRemap.bcp', FORMATFILE = 'D:\BCP\myRemap.xml' ) AS t1; GO -- review results SELECT * FROM TestDatabase.dbo.myRemap; ``` ## See Also [bcp Utility](../../tools/bcp-utility.md) [Use a Format File to Skip a Table Column (SQL Server)](../../relational-databases/import-export/use-a-format-file-to-skip-a-table-column-sql-server.md) [Use a Format File to Skip a Data Field (SQL Server)](../../relational-databases/import-export/use-a-format-file-to-skip-a-data-field-sql-server.md)