I have a requirement to import a file of rows containing fixed length data. The problem is that each row can be one of 5 different formats (i.e. different columns) -- where the "type" of row is indicated by the first two characters of the row. Each row gets inserted into its own table.
Could I use a simple Conditional Split to route the rows? Or is the split for routing similiar rows? Anyways, problems are never this simple...
In addition, each "grouping" of rows is related. The "first" row is considered the "primary" row (and gets a row id via IDENTITY, whereas the remaining rows in the group are "secondary" rows and have foreign key references back the the primary rows id.
Given (using spaces to separate columns and CrLf to show "grouping"):
So, the first 3 lines are all related to a MSFT record which needs to be spread across multiple tables. The next three lines are all related to AAPL, And the next FOUR lines (yes, each record can have zero, one, or more secondary rows) are related to CSCO.
(If this is still not clear, all the "01" rows will be written to [Table1] with each row having an IDENTITY value. All the "02" rows will be written to [Table2] the a FK pointing to the correct [Table1] row. All the "03" rows will be written to... and so on.
Will be getting new file for download from vendor to process in future. When I use DTS or Import wizard in sql server I get "could not find the selected row delimiter within the first 8kb of data, is the selected delimited valid? This is for a fixed length file. If I answer yes and continue everything is fine, until I get to the end of the record which it can't find. It basically lumps the records together. What is interesting, that if I import the same file in Access 2000, I don't get this problem. ANyone seen this before? Could not find anything on MSDN
I am trying to import a text file that has fixed length fields. It also has column headers repeated in the file.
The text file is delimited by <CR><LF>.
Question 1
There are certain rows that end abruptly after a column for ex: Row 1 <col1 data>.....<col2 data>.....<col3 data><CR><LF> Row 2 <col1 data>.....<col2 data><CR><LF>
This seems to be throwing off the text file import as row 1 seems to be importing alright but row 2 gets ignored. This not the behaviour I want. I want row 2 to also be imported and have a default of NULL for the columns that are not specified.
Does anyone know how to achieve this?
Question 2
This is not that serious, but currently, I do not know of a way to ignore repeating column headers. It would be nice if there was a way, but I can always resort to T-SQL based data cleaning after the import.
what is the best way to import fixed length text file to sql server using SSIS?
I was trying to using text file source and ole db destination..but since the text file has no columns and have different length per column and per line( it show only one column becasue it all concatnated), I can not map it to destination column..
How can I import it?
Here is the example of text file ( fixed with row delimeter)that i need to import to different columns...
I have this doubt and want to be sure if my thinking is correct.
Lets consider 2 tables one with Fixed length columns (char) and other table with Variable length columns (Varchar).
The table with fixed length column will always allocate same size within a Page however, table with variable length column will allocate actual length of data within a page.
I think that updates happening on table with fixed length columns will have more possibility of InPlace updates at least from data length perspective, however updates on table with variable length columns will have more split updates from data length perspective.
Similar to a previous post (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=244646&SiteID=1), I am trying to import data into a SQL Table.
I am trying to program a small application that will import product data obtained through suppliers via CD-ROM. One supplier in particular uses Fixed width colums, and data looks like this:
Example of Data
0124015Apple Crate 32.12
0124016Bananna Box 12.56
0124017Mango Carton 15.98
0124018Seedless Watermelon 42.98 My Table would then have: ProductID as int Name as text Cost as money
How would I go about extracting the data with an XML Format file? I am stumbling over how to tell it where to start picking up data for a specific column. Is there any way that I could trim the Name column (i.e.: "Mango Carton " --> "Mango Carton")?
I don't know if it makes any difference, but I've been calling SQL from my code by doing this:
Code in C# Form
SqlConnection SqlConnection = new SqlConnection(global::SQLClients.Properties.Settings.Default.ClientPhonebookConnectionString); SqlCommand cmd = new SqlCommand();
SqlConnection.Open(); cmd.ExecuteNonQuery(); SqlConnection.Close(); RefreshData(); I am running Visual Studio C# Express 2005 and SQL Server Express 2005.
I need to write data into a fixed column length file and was wondering the best (most efficient) way to tackle this. For example, the first few pieces of the report I'm working on now would be:
PacketID - Starting position 1, Field length 9 TransactionID - Starting position 10, Field length 9 Group number - Starting position 19, field length 10 PID/SSN - Starting position 29, field length 10
For the PID/SSN, if I have a PID it'll be 10 digits and fill the field length, if I don't I use SSN which is only 9 digits and enter a space as the 10th digit. Obviously if I don't have certain pieces of information I'll just need spaces of the specified length to satisfy the file format. I'm using SQL 2005. Thanks in advance for any help provided.
I have approximately 13 columns. Each Column has a start position and end position.. I created this in a table and defined the position, it's still not working for me.
FiceCode char(6), -- starting position 1, field length 6 StateStudID char(10), -- starting position 7, field length 10 CampusStudID char(10), -- starting position 17, field length 10 LastName char(25), -- starting position 27, field length 25
[Code] .....
I need a text output file that will define each start position.I also used: right(replicate('0',25) + cast(last_name as char(25)), 25) in my sql statement.when I add the first_name, I can't get it to start in position 52.
I have a fixed-length flat file that contains about 30 columns. I have got it pretty well figured out using the flat file connection tool, but I am having trouble with the end of the line.
I know when I look at the file it is a CrLf that separates the rows, and SSIS only seems to understand this to a certain extent. It knows to go to the next line, but it also adds two rectangles to the lines, like this:
While this does create a cool pattern, it is a pain in the butt. The only solution I have found is adding two more spaces to the last column in the table, but the ?s just get appended there.
If anybody has any clue how to get rid of them, that would be great.
Hi, I am trying to upload a fixed field text file to a sqlserver table using the DTS wizard. The txt file has 111 columns and the total length of a single row is 5897. The problem is when I use the wizard to specify the starting and ending of each column, its not allowing me to specify the columns beyond the position 4095. Is there a limitation on this? if so is there a work around ? to solve this. Any help on this is truly appreciated.
I'm trying to do an insert using Bulk Insert with a fixed length file.I'm using a format file.I'm getting the following error message:Cannot perform bulk insert. Invalid collation name for source column 16in format file '\wbhq.comdfsdviDataIntGOPFilesGOPFormatFile. txt'.Any suggestions are appreciated.Thanks!JenniferFormat File Contents:8.0161SQLCHAR02""0Space""2SQLCHAR04""1YearID""3SQLCHAR02""0Space""4SQLCHAR02""2PeriodID""5SQLCHAR02""3CompanyID""6SQLCHAR01""0Dash""7SQLCHAR04""0Space""8SQLCHAR01""0Dash""9SQLCHAR04""4UnitID""10SQLCHAR01""0Dash""11SQLCHAR04""5AccountCode""12SQLCHAR05""0Space""13SQLCHAR01""6AccountType""14SQLCHAR029""0Space""15SQLCHAR016""7GLAmount""16SQLCHAR0105" "0Space""Bulk Insert Statement:BULK INSERT FlatFile_GOPFROM '\wbhq.comdfsdviDataIntGOPFilesGLPAM.GOP'WITH(FORMATFILE ='\wbhq.comdfsdviDataIntGOPFilesGOPFormatFile. txt')Table Definition:CREATE TABLE [dbo].[FlatFile_GOP] ([YearID] [smallint] NOT NULL ,[PeriodID] [smallint] NOT NULL ,[CompanyID] [smallint] NOT NULL ,[UnitID] [smallint] NOT NULL ,[AccountCode] [int] NOT NULL ,[AccountType] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,[GLBalance] [money] NOT NULL) ON [PRIMARY]GOFile Contents:2007 210- -0002-3000 G196395.102007 210- -0002-3700 B1484.002007 210- -0002-3700 G1571.132007 210- -0002-3800 B157457.002007 210- -0002-3800 G161577.73
I have a file that has fixed row size of 148 and fixed column size, but the file has no end of line character. I know it is wierd but a client has made the file and refuses to change the format. So I am stuck with reading it the way it is. In Enterprise Manager, I used the Import/Export wizard and I specified fixed length and it let me specify 148 as the lenght of each line. Then it recognized the file and I was able to read it in. I saved the DTS package and I can run it over and over again using dtsrun. However I want to do the same thing using Bulk Insert. How do you specify fixed row length for Bulk insert and how do you give it individual column lengths?
I'm trying to extract data from a Flat File which is as fixed length as they come. The file has a header, which simply contains the number of records in the file, followed by the records, with no header delimeter (No CR/LF, nothing).
For example a file would look like the following:
00000003Name1Address1Name2Address2Name3Address3
So this has 3 records (indicated by the first 8 characters), each consisting of a Name and Address.
I can't see a way to extract the data using a flat file connection, unless we add a delimeter for the header (not possible at this stage). Am I wrong?
Any suggestions on possible solution would be much appreciated - I'm thinking Ill have to write a script to parse the file manually.
When I use SQL 2000 DTS Export to create a fixed length flat file, the data rows are delimited by carriage return-line. Which means that when I open the flat file in a text editor like UltraEdit or WordPad, the data rows are broken out nicely (row ends at the max row length position and new row starts at position 0).
But when I use SSIS to create the file, the whole file is displayed as one line in WordPad. The data rows don't end at the max row lenght position in ultraEdit neither. From Flat File Connection Manager's Preview page, I can see the data rows are displayed properly.
Now I wonder if the flat file destination is a true fixed length file.
I would like to read from a Text File using SSIS Integration Package.
The file has a fixed number of columns, let's say 3 columns. There is no row header and each columns length is fixed. There is no delimiter as well.
Here is the sample of the file contents: John Doe USA Mary Monroe UK Andy Archibald Singapore
Here is the hints to read the file contents 123456789 0123456789 0123456789 ============================== John Doe USA Mary Monroe UK Andy Archibald Singapore
If you notice, from the 1st column until the 9th column, it's reserved for the first name. The 10-th column until the 19th column, it's reserved for the last name. Finally the 20-th column until the 29th column is reserved for the Origin Country.
Since there's no delimiter inside the flat file contents, i have difficulty in parsing this text using SSIS Package.
Please let me know if you need any necessary information.
I have a flat file. It's fixed-with with CRLF record delimiters (a.k.a. Ragged Right format).
Some fields are null, and represented by the text NULL.
I'm trying to import the file into SQL via an OLE DB connection. The target table is a SQL 2000 data table. Two of the fields in the target database are of type smallint.
When I run PREVIEW on the data source (Flat File), everything looks good & correct. I added the convert columns task to convert my strings to smallint. This is where things go haywire.
After linking everything up, the conversion gives me a "Cannot convert because of a possible loss of data." All of my numbers are < 50, so I know this isn't the case. Another SSIS bogus error
My first instinct is the SSIS doesn't understand that NULL means null. I edited the file and replaced all instances of NULL with 4 emtpy string chars. Still no good. It seems to be having a hard time parsing the file now.
I dropped the convert task and tried editing the data source, and set the two smallint fields to smallint instead of string (SSIS formats). I get the same conversion error.
Changing the NULL values to 0 fixed the problem, but they're not 0. They're null.
Short of creating another script that converts all zeros to NULL using the aforementioned hack, I'm out of ideas.
I'm I missing something or is SSIS just incapable of handling nulls in fixed-width flat file formats?
I created a package to import records from a fixed length 700 byte text file to a table in a SQL Database. I used the wizard to set it up and note the byte where each column ends. I need to customize the process, as the name of the text file will change each night, so I want to be able to set the file name from the VB front end app.
I have tried modifying the Datasource property of the DTS connection to the flat file, without success. I have also tried setting a global variable for the datasource property in DTS, and assigning that from VB, similarly without luck.
Do I have to create a custom package in code from VB? If so, how do indicate where each column in the text file ends? If I can customize the existing package, is there a specific reference that I need to set in my project that will let me control the value of the global?
We are converting an old (circa 2000) VB app that used an Access database to a C#/SQL Server 2005 database. One of the key business processes in this app was to import large quantities of data (200K+ at a time). The format of the text file is fixed length and while we would love to change it we are unable to (the user community would burn us in effigee if not for real). I have been looking at DTS, BCP, and Bulk Insert using format files and, while I think we can get most of the way there I am not sure if I am understanding the format file structure completly. Below is the import specification for one of our files:
FieldName DataType Start Length AFIID C 1 5 LOCID C 7 15 LOGDATE C 23 11 LOGTIME C 35 4 LOGCODE C 40 4 HEADDIR C 45 3 SLUGVOL C 49 7 UNITS C 57 10
As you can see the each column is separated by a single space so that the second column starts two beyond the length of the first column, etc, etc. Here is an example of the data (the numbers in the first two rows are there to assist counting characters and do not exist in the real import file) 1 2 3 4 5 6 1234567890123456789012345678901234567890123456789012345678901234567 AFP29 01-SB-01 10-AUG-2000 0900 ABB DRW 9999.99 CFS AFP29 01-SB-01 10-AUG-2000 0900 ABB DRW 9999.99 CFS AFP29 01-SB-02 30-DEC-2000 0900 ABB DRW 9999.99 CFS AFP29 XX-XX 10-AUG-2000 1000 ABB DRW 123.23 CFS C123 01-SB-01 10-AUG-2000 0900 ABB DRW 9999.99 CFS AFP29 10-AUG-2000 0900 ABB DRW 9999.99 CFS AFP29 01-SB-01 0900 ABB DRW 9999.99 CFS AFP29 01-SB-01 SDKJFDKL 0900 ABB DRW 9999.99 CFS AFP29 01-SB-01 10-AUG-2000 ABB DRW 9999.99 CFS AFP29 01-SB-01 10-AUG-2000 900 ABB DRW 9999.99 CFS AFP29 01-SB-01 10-AUG-2000 0900 ABB DRW DFDSF CFS AFP29 01-SB-01 10-AUG-2000 0900 ABB DRW 9999.99 CFS
From what I have read about the structure of format files you start with the host file field order number, then the host file data type, then prefix length, then field length, then field terminator, then database column order, then database column name, and final the collation. This looks like it would work great for delimeted files but in my case there are no delimiters. If I don't include a terminator ("") would the following format file spec import my data correctly? 9.0 8 1 SQLCHAR 0 5 "" 1 AFIID "" 2 SQLCHAR 0 15 "" 2 LOCID "" 3 SQLCHAR 0 11 "" 3 LOGDATE "" 4 SQLCHAR 0 4 "" 4 LOGTIME "" 5 SQLCHAR 0 4 "" 5 LOGCODE "" 6 SQLCHAR 0 3 "" 6 HEADDIR "" 7 SQLCHAR 0 7 "" 7 SLUGVOL "" 8 SQLCHAR 0 10 " " 8 UNITS ""
Hello All, Can someone tell me how (in SQL) to convert an integer to a fixed length character filled with leading zeros. For example, I have an integer value of '125'. My user wants to see it displayed as '00000125'. How do I get the zeroes to fill in to a char(8) field when the length of the value differs, ie. '1', '125', '3452', etc.
I am using vs 2010 and I have an .xls file that I am trying to import into SQL Server 2012, and I have most of it figured out, but I have a date field that is giving me problems, and what I would like to do is put that date in a variable so I can add it to every record in my SQL Table.
I am using a SQL Task Editor with an excel connection and I have no problem getting other data from the excel document and putting into my variable, its just the date that I have problems.
Ok, so I've been playing around with SQL Server 2005 64-bit Dev Edition in readiness to phase out my existing SQL 2000 box. I've been having difficulty with importing fixed-width text data with SSIS. To explain, we use a linux based ERP system which is stored in a non-standard, encrypted flat-file format. So, each evening, I have a cron job spin off some shell scripts that use the ERP's report tool dump all of the relevant databases I need into a fixed-width format text file. The ERP platform also has a db layout report which is also in text format, I use this file (mangle it with VB first) and dump it back out into the format used to make a DSN file.
Because ODBC/DSNs are nifty enough to use a schema.ini file to lookup the data types, length and field names, I used that same db layout file to generate that as well.
I then put this schema.ini file in the same directory as the text file containing the fixed-width data, and its ready to go. In 2000/DTS, I simply launch the import/export wizard, point my data source to "Other (ODBC Data Source)" and point to the DSN file I created. Select my destination as a new SQL table on my server. Then tell the import wizard to do a straight across data copy, no transformations (except drop the destination table)... Save it as a local DTS package and finish the wizard. Once the package is saved, I use dtsrun from a cmd line in a bunch of batch files to re-populate the updated data from my ERP system to SQL everynight at 3am. Next morning, I can run fresh reports on my sales, inventory and financials from data of the previous day using Crystal or OLAP.
Now enters SSIS... Using the SSIS import wizard it does not give me the option to use a DSN source like DTS did. I've tried the .NET Framework for ODBC but it doesn't recognize the schema files, unless I'm not doing it right. Using the flatfile import method from SSIS requires that I hand enter the data types, widths and field name. As I have over 4000 fields across 26 tables, this is not practical. I also don't want to be required to hand-code a SSIS package in visual studio to resolve this, because again, I have to hand-code the schema when I already have it in a known ODBC schema file.
People have told me to use the DTS runner built into the SQL 2005, unfortunately my attempts to use it have failed mostly because the packages were written in SQL2000/32bit and I'm running the packages on 64-bit SQL 2005. They've given me alot of compile errors in visual studio. I also won't switch to a 32-bit version of SQL2005, because thats the whole point of moving to the new version and 64-bit technology, I want the extra horsepower and memory handling.
Has anyone else had this problem? Can anyone point me in the right direction on how to handle my import issue? I've picked up a few SSIS books but all they talk about is moving data back and forth with known server types and using the SSIS designer, nothing specific to working with fixed-width files, DSN or ODBC methods. Google searches has also ended nowhere due to the newness of SQL2005/SSIS.
I'm looking at http://blogs.conchango.com/jamiethomson/archive/2007/03/13/SSIS_3A00_-Property-Paths-syntax.aspx and http://blogs.conchango.com/jamiethomson/archive/2005/10/11/SSIS_3A00_-How-to-pass-DateTime-parameters-to-a-package-via-dtexec.aspx trying to understand where we are at using datetime overrides in ssis from the command line. One of these articles suggests something has been fixed in ssis sp1, what part of this issue was fixed?
Can you override (from the command line) a user var in ssis whose ValueType property is datetime? Or do some of the older articles still apply, ie the user var must be string so that ssis wont create a separate user var with the same name etc etc? And if it is string, does some kind of conversion need to be done to compare it against datetime cols in t-sql inside the pkg?
we can use 'sp_executesql' to execute any statemens. I have made a search and people, seems, need the dynamic sql only to process some table/cloumn unknown in advance. My idea is that the dynamic SQL feature is ideal for passing blocks of code (aka delegates). Particularily, you may require to execute different procedures under some acquired locks. A procedure would acquire the locks, execute the code and release the locks. The problem is, however, that I cannot find the specification for the variable length parameters. It seems not feasible for SPs. Nevertheless, the 'sp_executesql itself does accept the variable number of parameters. How? Can we look at the defenition?
I have a dataset with 2 columns, a rownumber and a servername - eg
rownumber servername
1 server1
2 server2
....
15 server15
I want to display the servernames in a report so that you get 3 columns - eg
server1 | server2 | server3
server4 | server5 | server6
...
server13 | server14 | server15
I have tried using multiple tables and lists and filtering the data on each one but this then makes formating very hard - i either end up with a huge gap between columns or the columns overlap
I have also tried using a matrix control but cant find a way to do this.
Does anybody know an easy way to do this? The data comes from sql 2005 so i can use a pivot clause on the dataset if somebody knows a way to do it this way. The reporting service is also RS2005
I am trying to use DTC to import about 500 records from an Excelsheet to an SQL database.
Some fields contain strings with a length of about 1700 characters.
When i'm trying to execute the DTC generated code it is giving an error and saying that the maximum string length of 255 has been reached. Althoug the column in the database is defined as nchar(1750).
I'm new to SQL Server. I installed a copy of 6.5 on my server and set it up today. I received a db from a colleague and have been unable to find out what the variable types and lengths are. This may be very easy but I need to know.