I'm aware that the following query will pull down the result set from a linked server:
SELECT * FROM openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
However, is this the same case when it comes to inserting? Will it pull down the result set or will it just get the column information?
INSERT INTO openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
If the former, then this is very inefficient. Should I limit the result set returned and will this effect my INSERT
?
This is basically a question on how OPENQUERY
works when it comes to SELECT
and INSERT
.
I appreciate any help.
The OPENQUERY command is used to initiate an ad-hoc distributed query using a linked-server. It is initiated by specifying OPENQUERY as the table name in the from clause. Essentially, it opens a linked server, then executes a query as if executing from that server.
The OPENQUERY is faster than the linked server because when we use the linked server, the SQL Server breaks the query into local and remote queries. The local queries are executed on the local server, and remote queries will be sent to the remote server.
Linked servers enable the SQL Server Database Engine and Azure SQL Managed Instance to read data from the remote data sources and execute commands against the remote database servers (for example, OLE DB data sources) outside of the instance of SQL Server.
Not sure what you try to accomplish with your INSERT.
The correct syntax (if you want to insert on the REMOTE server) should be
INSERT into openquery(MyServer, 'dbo.event_cast') values ('','')
The select only delays your insert retrieving what ever the select query returns (to no avail) without giving you additional info. Also, with openquery you could use this syntax, more correct, for the insert:
INSERT into myserver.mydatabase.dbo.event_Cast values('','')
But, if you are trying to insert into the LOCAL server the values retrieved by the select the syntax should be:
INSERT into dbo.my_localtable SELECT * FROM openquery(DEVMYSQL, 'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
And yes, the sentence will insert the values, not only the column information.
If you only want to replicate the table locally a simple
SELECT top 1 * into new_local_event_cast FROM openquery(DEVMYSQL, 'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast');
TRUNCATE TABLE new_local_event_cast;
will suffice
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With