Error: DT_WSTR to Uniqueidentifier, what is going on? - ssis

I am currently trying to convert an int field into a Uniqueidentifier, doing so by first converting the int into a (DT_WSTR, 100)
(Note: i have also tried (DT_STR) )
i have tried both the Derived Column and the Convert Data Transformations, but i always get an error when converting the then String to a GUID.
Here is what I have Already Tried:
NameOfDer.C Expression Data Type
1)ID_String (DT_WSTR, 100)ID_Int Unicode character string
-Below is where the error occurs-
2) GUIDTESTEST (DT_GUID)("{" + [ID_String] + "}") UniqueIdentifier
i have also tried it like this: (DT_GUID) [ID_String] (-Without the curly braces), but it failed just as bad.
Does anyone have an idead of what is Happening, i have also looked the data up on DataViewer after they are converted to Strings, and they all seem fine.

In SSIS you can't convert integer to GUID.
GUID has format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. So integer 5 can't be fit in that format.
Some guy did it with sql server, but if this don't gonna loose information?
The best thing what you can do, just generate real GUID for your rows.

Related

How to convert date from csv file into integer

I have to send data from csv into SQL DB.
Problem starts when I try to convert data into Int. It wasnt my idea and I really cant do much with this datatype. When I'm trying to achieve this problem pop up:
Data Conversion 2: Data conversion failed while converting column
"pr_czas" (387) to column "C pr_dCz_id" (14). The conversion returned
status value 2 and status text "The value could not be converted
because of a potential loss of data.".
Tried already to ignore this problem but then another problems came up so there is no other way than solving this.
I have to convert this data from csv file which is str 50 into int 4
It must be int4. One of the requirements Dont know what t odo.
This is data I'm trying to put into int4. Look on pr_czas
This is data's datatype
Before I tried to do same thing with just DD.MM.YYYY but got same result...
Given an input column named [pr_czas] that contain string values that look like 31.01.2020 00:00 which appears to be a formatted date time represented in the format "DD.mm.YYYY HH:MM", I would like to express that as a whole number DDMMYYHHMM
Add a derived column to your data flow and call this new_pr_czas
The logic I'm going to use is a series of REPLACE statements and cast the final result to an integer. Replace the period, replace the colon and the space - all with nothing
(DT_I8)REPLACE(REPLACE(REPLACE([pr_czas], ".", ""), ":", ""), " ", "")
This is an easy case but things to note.
An integer/int32/I4 has a maximum value of 2 billion.
310120200000 is too large to fit into that space so you would need to make that an bigint/int64/I8. If I remember your previous question, you were having troubles with a lookup task so this data type mismatch might hurt you there.
The other thing to be aware of is that leading zeros will be dropped when converted to a number because they are not significant. If you need to retain the leading zeros, then you're working with string data type. This is an advantage to working with the ISO standard but if your data expects DD, then far be it for me to say otherwise.
If you need to slice your date into another format, then you'll want to have a few derived columns. The first one will generate a string column for each piece of pr_czas - year, month, day, hour and minute. You'll use the substring method for this and findstring to find the period space and colon.
The next data flow will be used to put those string pieces back into the new format and cast that to I8. Why? Because you can't debug doing it all in one shot but you can put a data viewer between two derived columns to figure out where a slice went awry.

Converting string to integer with "%" special character in Pentaho

Hi I am facing an issue while converting string value to integer.
Actually I am reading data from the table and there are fields like 39% and they are string data type.
Now i want to convert them into INteger datatype and load them in to another table.
I tried using select values in PDI but it is giving me error like. "Could't convert String to Integer."
Please help me in resolving this issue.
The percentage sign isn't part of the integer type in Java, so first you need to remove that character in order to make the type casting.
Add a new "Replace in string" step between the data origin and "Select values"
Double click on the new added step and on the "In stream field" select the field that needs to be cleaned
On "Search", type "%" (without the parentheses) and click Ok to close the dialog.
That should do the trick.

SSRS FormatNumber Error

trying to format number (decimal), but it shows me #Error on production server:
=FormatNumber(First(Fields!SumWithMailDelivery.Value, "document"), 0)
but on developers server it works fine.
Maybe someone know, how can i resolve this?
p.s. without formatting it works on production server fine too.
As #IanPreston says, it is most likely a type conversion error. I imagine your production data has some invalid characters for that column or some Null columns that make the numeric conversion fail.
You can use the Val function to do the conversion. Val differs from other numeric conversion functions in that it won't error when the string to be converted isn't numeric - it just does the best job it can.
So try an expression like this for the Value property:
=IIF(Fields!SumWithMailDelivery.Value Is Nothing,
Nothing,
IIF(IsNumeric(Fields!SumWithMailDelivery.Value),
Val(Fields!SumWithMailDelivery.Value),
Fields!SumWithMailDelivery.Value)
)
then use N0 as the Format property to format it as numeric if possible.
This formula will:
Leave the cell as Nothing if the field is Null
Convert to numeric and use the appropriate format if possible
Otherwise just output whatever is in the field

SSIS Change Columns Types

I need to know that How to convert nvarchar(255) to varchar(50) in SSIS Type Conversion?
I have tried converting my nvarchar(255) to DT_STR(Unicode) but still it is not working.
Maybe you want to try something like this in Derived Column SSIS element:
(DT_STR, 50, 1252) SUBSTRING([String],1, 50)
The cast formula is :
(DT_STR, «length», «code_page»)
Because you want to change from unicode to varchar(How to convert nvarchar(255) to varchar(50)), you need to know code page of varchar. Code page is Character encoding.
Usually you need to use code page which is in your SQL Instance, SQL Database, SQL Column.
If you try to write this new string in you table, there is column with property COLLATION, value can be not empty or be empty database default...
I found this page about Code page architecture, there is written how to relate SQL Collation with Code page.
SSIS Data Type SSIS Expression SQL Server
string (DT_STR, «length», «code_page») char, varchar
Unicode text stream (DT_WSTR, «length») nchar, nvarchar, sql_variant, xml

Problem with STGeomCollFromWKB reading from varbinary(max)

I have imported a csv file containing spatial area information in varchar, then converted varchar(max) values to varbinary(max) by adding '0x' to varchar(max) values prior to conversion. By then, apart from the '0x' in the beginning, the data in varbinary(max) column looks exactly the same as the varchar(max) one in converted to text.
Now I run the following script:
select geometry::STGeomCollFromWKB(wkb, 4326) from dbo.MyTable
where WKB is the varbinary(max) column.
Running the above script throws this error: 'The well-known binary (WKB) input is not valid'
The source of data is from Open Street Map so no doubt they are correct area data. So I assume there must be something wrong in what I am doing or I am missing some point to convert WKB to geometry data type.
Could anyone help please?
I assume the problem is when converting the varchar data to varbinary you are converting the actual character representation of the binary data, rather than just changing the type to binary.
Eg, if you have the data 0xDEADBEEF in your varchar column, then doing
convert(varbinary(max), 'DEADBEEF') will convert the ascii character representations into binary.
What you want to do instead is convert the hex string into binary, which is possible using the style parameter of convert.
SELECT convert(varbinary(max), 'DEADBEEF', 2)
should do what you want to convert your varchar wkb data into real binary.