Issue exporting from SQL Server 2012 to PostgreSQL - sql

I am trying to export a SQL Server 2012 database into a PostgreSQL 9.3 but am getting a weird conversion error for float columns. If the import ignores the float columns, everything goes well (about 300k rows), otherwise I get the following:
- Copy in "TABLE_TO_COPY" (Error)
Messagges
Error 0xc020844b: Data Flow Task 1: Exception during data insertion. The message returned by the provider is: Unable to cast object of type 'System.Double' to type 'System.Char[]'.
(SQL Server Import and Export Wizard)
Errore 0xc0047022: Data Flow Task 1: Error Code SSIS DTS_E_PROCESSINPUTFAILED. Error in method ProcessInput in component "Destination - TABLE_TO_COPY" (94) with code 0xC020844B during the processing of the input "Destination Input" (97). The specified component returned an error from the method ProcessInput. [...]
Error 0xc02020c4: Data Flow Task 1: Attempt to add a row to the buffer of activity Data flow errored with code 0xC0047020. [...]
(SQL Server Import and Export Wizard)
Error 0xc0047038: Data Flow Task 1: Error Code SSIS DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on Origin - PATIENT_DIALYSIS_SYMPTOM returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
(SQL Server Import and Export Wizard)
It's not a memory issue, since the server settings have the highest possible value. What could cause this?

The issue is only present in SQL Server Management Studio's Import/Export Wizard. By resorting to the SSIS, the issue is not there.
This is the configuration I have set up for my Data Flow Task:
Source: OLE DB pointing to my SQL Server database table
Destination: OCDB connection pointing to my PostgreSQL table
It doesn't look like SSIS is able to create source tables into the origin DB, so I had to do that before setting up the project.

Related

SQL Server: resuming an interrupted export

I'm migrating 2 million rows from a SQL Server table over to a Postgres database. I'm using the SQL Server Import/Export Wizard and everything was going fine until I got to 1.5 million records (took all night).
I'm not sure why it crashed (see error below) but I need to get the rest of the records over there. I can append them if it wasn't a resource issue. If it was, then I can export the remaining 500k as a new table and then merge them later in pgAdmin.
My question is: when selecting the remaining 500k rows to finish the job, how do I correctly exclude the 1.5 million records that DID copy? There is no primary key and there are no unique values.
I tried this, listed in a post about selecting a range of rows. Problem is I don't know for sure if its correctly gathering the remaining records. Postgres indicates that 1574503 rows out of the 2M were successfully migrated. Stats indicate the Postgres database is at 495mb now.
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL AS noorder)) AS RowNum,
*
FROM
invoices) AS alias
WHERE
RowNum BETWEEN 1574504 AND 2000000
In case it helps, here is the SQL Server error info from the when it crashed:
Error 0xc020844b: Data Flow Task 1: An exception has occurred during data insertion, the message returned from the provider is: The connection has been disabled.
Error 0xc0047022: Data Flow Task 1: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Destination - invoices" (139) failed with error code 0xC020844B while processing input "Destination Input" (142). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.
Error 0xc02020c4: Data Flow Task 1: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.
Error 0xc0047038: Data Flow Task 1: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on Source - Query returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.

Copy 0 as it is without converting to NULL from nchar to decimal in SQL?

I have a table with 50,000+ records and need to copy all the records to another table which has the same columns(different data types) plus some extra columns. Now my requirement is there are two columns(in the destination table) which cannot have NULL values. Two columns and the data types in source and destination tables as following:
Source Table
Column Name Data Type
total_labor_hours nchar(10)
feet_produced nchar(10)
Destination Table
Column Name Data Type
total_labor_hrs Decimal(18,4)
labor_feet_produced Decimal(18,4)
Here is a sample dataset of the source table: http://www.sqlfiddle.com/#!18/f654e/1
Here is a sample dataset of the destination table: http://www.sqlfiddle.com/#!18/fe196d/1
Specifically the issue is if you see the destination table the Unique_ID = 2 record's "labor_feet_produced" column is NULL after copying. Which means the 0 in the source table has been converted to NULL when it's copied to destination table. I want it to be copied as 0.0000. I do not care about any NULL values in any other field but there shouldn't be any in "total_labor_hrs" & "labor_feet_produced" columns
I have tried two methods as following but did not succeed.
Method 1
When creating the destination table I unchecked "Allow Nulls" field for those two columns and tried copying but id wasn't successful.
These are the errors it gave me :
Copying to [dbo].[ALL_LABOR_DETAILS] (Error)
Messages
Error 0xc0202009: Data Flow Task 1: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Unspecified error".
(SQL Server Import and Export Wizard)
Error 0xc020901c: Data Flow Task 1: There was an error with Destination - ALL_LABOR_DETAILS.Inputs[Destination Input].Columns[feet_produced] on Destination - ALL_LABOR_DETAILS.Inputs[Destination Input]. The column status returned was: "The value violated the integrity constraints for the column.".
(SQL Server Import and Export Wizard)
Error 0xc0209029: Data Flow Task 1: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Destination - ALL_LABOR_DETAILS.Inputs[Destination Input]" failed because error code 0xC020907D occurred, and the error row disposition on "Destination - ALL_LABOR_DETAILS.Inputs[Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
(SQL Server Import and Export Wizard)
Error 0xc0047022: Data Flow Task 1: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Destination - ALL_LABOR_DETAILS" (58) failed with error code 0xC0209029 while processing input "Destination Input" (71). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.
(SQL Server Import and Export Wizard)
Error 0xc02020c4: Data Flow Task 1: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.
(SQL Server Import and Export Wizard)
Error 0xc0047038: Data Flow Task 1: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on Source - NOR_LABOR returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
(SQL Server Import and Export Wizard)
Method 2
Created the destination table without un-checking the "Allow Nulls" field for the two columns "total_labor_hrs" and "labor_feet_produced". Copying data was successful. But all the 0's were converted to NULL.
Again as mentioned above my goal is to copy any 0's in those two columns as 0.0000 without converting it to NULL.
How about just using try_convert()?
select coalesce(try_convert(Decimal(18,4), total_labor_hours), 0)
My guess is that the space in the values are causing the problems. You should be using nvarchar() rather than char().
Are the tables within the same database?
INSERT INTO [dbo].[ALL_LABOR_DETAILS] (
[ID]
,[trx_date]
,[work_order]
,[department]
,[work_center]
,[operation_no]
,[operator]
,[total_labor_hrs]
,[labor_feet_produced]
,[item_no]
)
SELECT
[ID]
,[trx_date]
,[work_order]
,[department]
,[work_center]
,[operation_no]
,[operator]
,[total_labor_hours]
,[feet_produced]
,[item_no]
--,[lot_no]
--,[default_bin]
--,[posted]
--,[labor_feet_produced]
FROM [dbo].[NOR_LABOR]

Exporting data to csv from SQL Server

I have a SQL Server table that contains columns of type varchar(MAX) and I'm trying to get a .csv (UTF-8) type export but I get this error instead.
I want to know how I can change this data type to nvarchar(MAX) without losing data. Can anyone help?
Messages
Error 0xc00470d4: Data Flow Task 1: The code page on Destination - test_csv.Inputs[Flat File Destination Input].Columns[test1] is 1252 and is required to be 65001.
(SQL Server Import and Export Wizard)
Error 0xc00470d4: Data Flow Task 1: The code page on Destination - test_csv.Inputs[Flat File Destination Input].Columns[test2] is 1252 and is required to be 65001.
(SQL Server Import and Export Wizard)
(many more of the same error - for each column)
Error 0xc004700c: Data Flow Task 1: One or more component failed validation.
(SQL Server Import and Export Wizard)
Error 0xc0024107: Data Flow Task 1: There were errors during task validation.
(SQL Server Import and Export Wizard)
I have looked into similar questions, where I have the same problem but I don't know how to use CAST or CONVERT in the query
You can solve this in 3 ways:
CAST your source columns to NVARCHAR in the initial SELECT, e.g. CAST(mycolumn as nvarchar(column_length))
Use a SSIS Data Conversion task to convert the strings to Unicode
Set Flat File Connection Manager's code page to '1252 ANSI - Latin I'
(65001 Code page = Unicode (UTF-8))
You might find that the 3rd option is easiest.

Acess 2007 Attachment type to SQL server

My predecessor created an Access database in 2007, which has a number of tables, forms and query.
One of the tables holds images, which are stored as attachments.
The database is almost 2GB in size (compacting and repairing doesn't change it). So I'd like to convert it to a SQL Server 2014 database.
I've used the Data Import tool, which has copied the tables & data into SQL Server. But the attachments are just converted to a string of their file name (image1.jpg)
Is there anyway to import the images from the MS Access database in to the SQL Server?
I also have a Sharepoint 2010 server, would this be a better option?
Update (sorry new to Stack Overflow, not sure what to put where)
I've changed the field mapping in import wizard to IMAGE, and I get the following error. If I set it to ignore, the fields are blank. using VARSTRING, puts either Null or 0x in the field.
Executing (Error) Messages Error 0xc02020c5: Data Flow Task 1: Data conversion failed while converting column "Photos" (23) to column
"Photos" (57). The conversion returned status value 2 and status text
"The value could not be converted because of a potential loss of
data.". (SQL Server Import and Export Wizard)
Error 0xc0209029: Data Flow Task 1: SSIS Error Code
DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Data Conversion 0 -
0.Outputs[Data Conversion Output].Columns[Photos]" failed because error code 0xC020907F occurred, and the error row disposition on "Data
Conversion 0 - 0.Outputs[Data Conversion Output].Columns[Photos]"
specifies failure on error. An error occurred on the specified object
of the specified component. There may be error messages posted before
this with more information about the failure. (SQL Server Import and
Export Wizard)
Error 0xc0047022: Data Flow Task 1: SSIS Error Code
DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Data
Conversion 0 - 0" (49) failed with error code 0xC0209029 while
processing input "Data Conversion Input" (50). The identified
component returned an error from the ProcessInput method. The error is
specific to the component, but the error is fatal and will cause the
Data Flow task to stop running. There may be error messages posted
before this with more information about the failure. (SQL Server
Import and Export Wizard) Error 0xc02020c4: Data Flow Task 1: The
attempt to add a row to the Data Flow task buffer failed with error
code 0xC0047020. (SQL Server Import and Export Wizard) Error
0xc0047038: Data Flow Task 1: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.
The PrimeOutput method on Source - Attachments returned error code
0xC02020C4. The component returned a failure code when the pipeline
engine called PrimeOutput(). The meaning of the failure code is
defined by the component, but the error is fatal and the pipeline
stopped executing. There may be error messages posted before this
with more information about the failure. (SQL Server Import and
Export Wizard)
You've used SQL Server to import the data which is a good thing. I would probably use data type IMAGE for the column to hold the images. You could also try the data typoe VARBINARY(MAX).
Use the Import and Export WIzard to import the data en see which datatype works.
Hope this helps you out.
Edit:
You say when you convert the attachment table you only have the names of the images. Are these names related to the images. When you still have the images you can store them in a folder and use FILESTREAM to connect to thme using SQL Server.
Using FILESTREAM enhances the database because the data of the images is no longer saved in the database, only a reference to them.
Unfortunately SQL Server doesn't support multi-valued or attachment like fields.
For more information about FILESTREAM look at this website: http://msdn.microsoft.com/library/hh461480

Importing csv file to table

I'm trying to import a csv file to a table in sql server 2005 with the wizard.
but when i import the file is always give me this errors :
Executing (Error) Messages Error 0xc02020a1: Data Flow Task 1: Data
conversion failed. The data conversion for column "Column 15" returned
status value 4 and status text "Text was truncated or one or more
characters had no match in the target code page.". (SQL Server Import
and Export Wizard)
Error 0xc020902a: Data Flow Task 1: The "output column "Column 15"
(70)" failed because truncation occurred, and the truncation row
disposition on "output column "Column 15" (70)" specifies failure on
truncation. A truncation error occurred on the specified object of the
specified component. (SQL Server Import and Export Wizard)
Error 0xc0202092: Data Flow Task 1: An error occurred while processing
file "C:\PEP_ENTITIES_71.csv" on data row 1. (SQL Server Import and
Export Wizard)
Error 0xc0047038: Data Flow Task 1: SSIS Error Code
DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Source
- PEP_ENTITIES_71_csv" (1) returned error code 0xC0202092. The component returned a failure code when the pipeline engine called
PrimeOutput(). The meaning of the failure code is defined by the
component, but the error is fatal and the pipeline stopped executing.
There may be error messages posted before this with more information
about the failure. (SQL Server Import and Export Wizard)
What i'm doing wrong? This file was a export from a query, then i delete all records and try to import.
The flat file import task will default lengths to VARCHAR(50). You need to go to the Advanced property of the flat file connection page and change the length manually to match the destination table. There should also be an option to Suggest Types which may match the metadata that you're using, but it does a sampling of rows from the file so it may not be as accurate as just setting types manually.
It may be that you're trying to import data from the CSV which is too large for the field you're importing it in to. Perhaps you need to increase the size of your fields in your SQL table?
Have you tried to import a single, very small line of data from the CSV to see if that works? If it does, excessively large data somewhere in the rest of the sheet may be the problem.