Linked Server query

Posted on 2013-05-13
Last Modified: 2013-05-22

I have a database in mySQL and I wanted to replicate it to SQL Server so I can make queries in a better way (i believe sql server is much more user-friendly to make queries). I've been trying to make a linked server to this mysql database and when I got it (at least it appears in my "Linked Servers" list with all the catalogs and tables), I can't run queries directly...

I'm posting a picture of the linked server i built. When I try to query directly into the tables it doesn't work...
For example:
SELECT * FROM hitme.dbhitsystem.tbldatabases;

Open in new window

But when I use openquery it does work:
SELECT * FROM openquery(hitme,'SELECT * FROM dbhitsystem.tbldatabases')

Open in new window

Is there anyway I could make queries directly, using intellisense??

Thanks in advance
Question by:toddinho
  • 3
  • 3
  • 2
  • +2
LVL 10

Expert Comment

ID: 39161782
did u try
SELECT * FROM [hitme].dbhitsystem.tbldatabases;
LVL 68

Expert Comment

ID: 39161960
The official fully qualified identifier for any object in MSSQL consists of four parts separated by a dot:  Server.Database.Owner.Object
The correct string corresponding to OpenQuery is (probably)
but, depending on the driver, this might not work.

Author Comment

ID: 39162096
I tried to upload the pictures of the errors, but it keeps loading forever... Anyway, neither of the options worked =/

The first one returned:
Invalid object name 'hitme.dbhitsystem.tbldatabases'.

Open in new window

And the second one:
Invalid use of schema or catalog for OLE DB provider "MSDASQL" for linked server "hitme". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.

Open in new window

LVL 23

Expert Comment

ID: 39162118
There are 2 ways of getting what you want:

1) Create a VIEW in your local database for each table in the linked server.

2) In SQL Server you can also create a SYNONYM:

FOR LinkedServer.database.schema.table;

Open in new window

More info:

In both cases,  Intellisense will work on the new items (VIEW or SYNONYM).  I actually like using the VIEW, since it seems more standard and the next DBA should be able to figure out what I did more easily. :)
LVL 68

Assisted Solution

Qlemo earned 200 total points
ID: 39162392
But a view does not reflect changes on the target table, while a synonym does :p.

As I said with the fully qualified name, it might not work. If the driver does not allow for it, you can't. You can try if one of the following work:
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

LVL 23

Expert Comment

ID: 39162440
Good point Qlemo.  The one time I needed this was for reporting and I had static tables on the linked server.

Author Comment

ID: 39162612
Actually, my need is this: I have a whole system that uses a mySQL database... But mysql is very poor (in my opinion) in managing the data... I don't have the time or the headcount to migrate the database itself and make the system store the data in sql server directly...

I was thinking about linked server because i thought it would be just like linked tables in access, if the source is modified, the table is modified in "real time"... But is it true?

Is the linked server the best way to do this? My idea is this (yes, i know this is ugly and all): the system keeps using the mysql database and when I need to create statistics, analize data, etc, I could do it from SQL Server, which would be a true representation of the actual database... You could wonder why not do all this in mysql itself. The main reasons I can think of (i'm no expert in databases) are: Intellisense, performance and ability to use SQL Dependency and triggers...

PS: There are actually 3 databases, with total of about 98 tables... So creating manually the views for each one would be somewhat difficult =p

I hope it's a little more clear my problem..
LVL 23

Accepted Solution

nemws1 earned 300 total points
ID: 39162653
You wan to use a SYNONYM like I suggested above.  As to your points:

1) Intellisense - yes, this should work.  (I hate it, personally, and always install SQL Complete, which is free and much better, IMO.)

2) Performance - will go down.  All your data is on one server and you want to do analysis on another server.  Better to do your analysis on the same server as your data, unless this server is *really* slow and your other server is *really* fast.

3) SQL Dependency / triggers - No.  Do not even attempt this.  Both of these will need to be done on the MySQL side.  MSSQL will not know when changes occur on remote systems nor should it be responsible for data integrity *elsewhere*.  You definitely want to do this on the MySQL side.

Finally, whether you want to go with views or synonyms (again, the latter makes more sense) you should always think to yourself "dynamic SQL" when you get in a situation like this.

On the MySQL side:

USE information_schema;
SELECT CONCAT('CREATE SYNONYM [', table_name, '] FOR mysql_link_name.mysql_database_name..[', table_name, '];')
FROM tables
WHERE table_schema = 'mysql_database_name'

Open in new window

Then run the output in MSSQL.
LVL 68

Expert Comment

ID: 39163036
DON'T! All data remains on the MySQL side. Even worse, MSSQL will not be able to use any optimization (indexes, statistics, views, ...) for that data. Performance will cease to exist.

When you use "linked tables" in Access, you substituting a simple SQL engine by a much more advanced SQL engine, and so there is a gain. Using MSSQL to access MySQL will fail horribly because MySQL is less advanced, and the drivers are just not suited to be effective in that environment.
LVL 21

Expert Comment

by:Alpesh Patel
ID: 39171075
you can directly call the table

select * from Linkedserver.database.schema.tablename

no need to create synonyms.

If you wish to hide the linked server detail then you can you that or for short the name(avoid writing long text every time).

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
SQL Server engine let you use a Windows account or a SQL Server account to connect to a SQL Server instance. This can be configured immediatly during the SQL Server installation or after in the Server Authentication section in the Server properties …
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now