How to Prevent Ssis from Writing Column Names to the Flat File Output

SSIS strips periods off column names in Flat File Connection Manager

Open the Flat File connection manager, Go To Advanced Tab and change to columns names (Add periods instead of spaces)

Sample Image

Similar question

  • Add Special Charachter in SSIS Flat File Column Header

how to remove column names from flat file and replace with header record information.. (filename, timestamp etc..)

I can think of two ways to do it, but it really is a matter of preference which you pick.

  1. Do what you have done already (use a data flow task to populate the header information). Next, create another connection manager for the file that has all of the column information defined. On the general tab, indicate that there is one header row to skip and uncheck the box for column names in the first data row. Then, create a data flow task to populate the file with data and, use this connection manager. So when your package runs, the first data flow task needs to run first and write the header row. When that is complete, the second one should run and populate the file with data.

  2. Write the data to the file using a data flow task, and then have a script task that replaces the column names with the header row (or if you don't have column names there, just inserts the header row at the beginning of the file).

Prevent Duplicate headers in flat file destination - SSIS

Perhaps I'm missing something but this works for me. I am not having the read only trouble with ColumnNamesInFirstDataRow

I created a package level variable named AddHeader, type Boolean and set it to True. I added a Flat File Connection Manager, named FFCM and configured it to use a CSV output of 2 columns HeadCount (int), AddHeader (boolean). In the properties for the Connection Manager, I added an Expression for the property 'ColumnNamesInFirstDataRow' and assigned it a value of @[User::AddHeader]

Sample Image

I added a script task to test the size of the file. It has read/write access to the Variable AddHeader. I then used this script to determine whether the file was empty. If your definition of "empty" is that it has a header row, then I'd adjust the logic in the if check to match that length.

    public void Main()
{

string path = Dts.Connections["FFCM"].ConnectionString;

System.IO.FileInfo stats = null;
try
{
stats = new System.IO.FileInfo(path);
// checking length isn't bulletproof based on how the disk is configured
// but should be good enough
// http://stackoverflow.com/questions/3750590/get-size-of-file-on-disk
if (stats != null && stats.Length != 0)
{
this.Dts.Variables["AddHeader"].Value = false;
}
}
catch
{
// no harm, no foul
}
Dts.TaskResult = (int)ScriptResults.Success;
}

I looped through twice to ensure I'd generate the append scenario

Sample Image

I deleted my file and ran the package and only had a header once.

Sample Image

SSIS export data to flat file and omit header from the output

The answer is to set header rows to skip to 0 and uncheck the column names in the first data row. To get this to create a file manager with the column headings, I used the following steps:

  1. Delete the flat file destination and file manager, if exists
  2. Add new flat file destination and click new flat file manager
  3. When the dialogue opens, it asks for an existing file. Instead, browse to a path and enter a new file name. Column names in the first data row will not be checked, so click OK and OK. This will populate a flat file without headers.

SSIS Need Flat File output with 2 column headers the same

Assuming I understand the problem correctly, you need to have the same column name in the output file twice. Doesn't matter whether it's same data or not, just the header needs to be repeated.

It's a little hokey, but in your connection manager, uncheck "Column Names in the first data row" and redefine the columns as email and email1. This will allow you to connect the columns to the right places in the file.

In your flat file destination, you have the ability to define Header row(s). It's very limited, you can't put useful things in there like dynamic checksums and such but in your case, paste in first1, last1, email, shortname, email and run the package. Data will be extracted to the correct columns and a header row will be prepended to the file with all the "right" field names.

Two downsides to this approach. First is the connection manager becomes output only as it would attempt to read in the header row from the file. Second is that any changes to the layout will not be kept in sync with the manual header row.

SSIS generating csv file without headers

Please check the option in the Flat file connection manager as below

Just in case this doesn't work then the setting are not being carried over to your config files. In such cases there are two workarounds:

  1. Editing the .dtconfig to edit "firstcolumnhasnames" to 1 adds the column names without needing to delete the connection from the package.
  2. delete the destination connection, and recreate from scratch.


Related Topics



Leave a reply



Submit