Converting to varbinary adds spaces - mysql

I'm trying in insert some data from Sql Server into MySQL using OPENQUERY
SELECT 1,1,'0123456789','Test Contact' INTO #tempcontacts
INSERT INTO OPENQUERY([PBXA_MYSQL],'SELECT relation_id,unit,name,number FROM asterisk.contacts')
SELECT id,unit_id,CONVERT(varbinary(100),name),CONVERT(varbinary(50),RIGHT(number,8)) FROM #tempcontacts
DROP TABLE #tempcontacts
The fields on MySQL are varbinary and i'm unable to change that. The data is inserted but every character has a space added. It looks like this:
name number
T e s t C o n t a c t 0 1 2 3 4 5 6 7 8 9
Is there a better way to convert to varbinary?
Thanks

Related

SQL - How to split values in field with commas in multiple rows

I have a field in a MySQL table with '3,4,7,16' in it.
These values are store in another table
id - value
1 - name1
2 - name2
...
16 - name16
I would like to get then in 4 rows
3
4
7
16
I have seen many answer but they need temporary table, function, loop or procedure.
I am using Django ORM and it is not possible to use procedure in Django query.
Can you help to solve this issue ?

SSIS Not Exists In One Data Flow

I'm trying to achieve the following in SSIS:
Union All 6 separate SQL queries (OLE DB Sources) (call this dataset A)
Dataset A contains
id Col A Col B......
1
2
3
4
5
6
7
8
I have another OLE DB Source SQL query (dataset B) that contains
id Col A Col B .......
1
2
3
4
10
11
12
All columns Col A, Col B etc. are the same in all the queries.
I want to return dataset A unioned (UNION ALL) with dataset B where the ids in dataset B don't match the ids in dataset A. i.e.
id Col A Col B......
1
2
3
4
5
6
7
8
10
11
12
Also before performing the UNION there is some extra work done on dataset B to fill in NULL values in the columns.
I can achieve this quite easily by inserting dataset A into a table then using this table in a subsequent NOT EXISTS or similar query to get the missing info and then UNIONing together. Ideally though I'd like to do this in one sweep using a dual multicast with one side going into a Lookup No match and the other straight into a destination table.
Unfortunately the Lookup and No Match output returns the 'wrong' missing data i.e. it returns
5
6
7
8
rather than
10
11
12
this is because the lookup (dataset B) and source data (dataset A) are the 'wrong way' around. I don't want to rewrite dataset A as the Lookup query so is there another way around this using a different transform or other method?
I've experimented with the Cache Transform but it doesn't seem to work in the same data flow as the Lookup Transform as there is read/write contention.
Thanks,
Rich.
Sounds like you want a "Fuller Outer Join" kind of "Merge" component, then a kinda manual merge after the fact. If I misunderstood you, you can always add a Conditional Split after the Merge, to filter if A is null, if B is null, etc.
An example for the "Merge Columns" is creating a repeated "Id" with this expression: "ISNULL(Id_A) ? Id_B : Id_A"
An example for the "Full Outer Join - Merge":

how to patabless result of mysql stored procedure inside temporary

I have one stored procedure with one in parameter that returns multiple rows with 3 different columns. I want this result to be inserted inside another table with these 3 column filed and other tables individual fields.
However, when I create the temporary table it shows a blank resultset.
Can anybody help me to sort out this?
CREATE DEFINER=`root`#`localhost` PROCEDURE `getContactRolePermission`(
in contactroleid double
-- inout PermissionTableID double
)
BEGIN
select -- entitydetails.id,
contact.id as userid,
-- contacttyperolemap.contacttypeId ,
contacttyperolemap.roleid ,rolepermission.permissionid
from contacttyperolemap
join rolepermission on contacttyperolemap.roleid=rolepermission.roleid
join entitydetails on entitydetails.id = contacttyperolemap.ContactTypeID
join contact on contact.contactTypeID = entitydetails.id
where contacttyperolemap.contactTypeID = contactroleid
order by contact.id;
CREATE temporary TABLE tmp(
ID double ,
userid double ,
roleid double ,
permissionid double
);
END
stored procedures result is
uid rid pid
2 1 5
2 1 2
2 1 3
2 1 4
2 1 1
23 1 4
23 1 1
23 1 5
23 1 2
23 1 3
26 1 4
26 1 1
26 1 5
26 1 2
26 1 3
I want to insert this data inside userpermission table
schema is
id uid rid pid
1 10 2 1
Looks like you need to create a view instead of a stored procedure for the first 3 rows. Then in a separate query you can query any columns from that view and join that data with whatever other data you want from other tables. Hopefully I read the question right. Heres an article on creating views: https://msdn.microsoft.com/en-us/library/ms187956.aspx
Use INSERT ... SELECT command to fill target table.
And, your temp table shows empty result, because you have not filled it.

Get the SQL column Value dynamically

I have a column in table A. the column name is Sequence number. The Structure of table A is numbers from 1,2,3,4.....3600.
Now on the basis of table A. I want the below output from the SQL select query for SQL server 2008.
seq no dynamic col
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
10 2
11 2
12 3
13 3
My Second column is getting generated at the run time.
And the business logic is that, if the seq number mod 6 = 0 then increment the value of dynamic column.
Thanks in advance
Try this:
select seqno, (seqno/6) +1 dynamiccol
from t
Fiddle Demo
Take this as pseudo code because I'm not familiar with SQL Server specifically, but it should give you somewhere to go.
SELECT
seq_no,
ROUNDDOWN(seq_no/6)+1 AS dynamic_col
FROM
my_table

how to push data down a row in sql results

I would like help with sql query code to push the consequent data in a specific column down by a row.
For example in a random table like the following,
x column y column
6 6
9 4
89 30
34 15
the results should be "pushed" down a row, meaning
x column y column
6 null or 0 (preferably)
9 6
89 4
34 30
SQL tables have no inherent concept of ordering. Hence, the concept of "next row" does not make sense.
Your example has no column that specifies the order for the rows. There is no definition of next. So, what you want to do cannot be done.
I am not aware of a simple way to do this with the way you are showing the table being formatted. If your perhaps added two consecutively numbered integer fields that provide row number and row number + 1 values, you could join the table to itself and get that information.
After taking a backup of you table:
Make a PHP function that will:
- Load all values of Y into an array
- Set Y = 0 (MYSQL UPDATE)
- load the values back from PHP array to MYSQL