Consulta de Ejemplo de Servidor Vinculado SQL Server


Mientras estoy en Management Studio, estoy tratando de ejecutar una consulta/hacer una unión entre dos servidores vinculados. ¿Es esta una sintaxis correcta usando servidores de base de datos enlazados:

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

Básicamente, se acaba de introducir el nombre del servidor de la base de datos en la base de datos.¿mesa ?

Author: marc_s, 2010-11-04

11 answers

El formato probablemente debería ser:

<server>.<database>.<schema>.<table>

Por ejemplo: Servidor de datos1.db1.dbo.cuadro 1


Actualización: Sé que esta es una pregunta antigua y la respuesta que tengo es correcta; sin embargo, creo que cualquier otra persona que tropiece con esto debería saber algunas cosas.

Es decir, cuando se realiza una consulta contra un servidor vinculado en una situación de unión, la tabla COMPLETA del servidor vinculado probablemente se descargará al servidor desde el que se ejecuta la consulta en orden para hacer la operación join. En el caso del OP, tanto table1 de DB1 como table1 de DB2 se transferirán en su totalidad al servidor que ejecuta la consulta, presumiblemente llamado DB3.

Si tiene tablas grandes, esto puede resultar en una operación que tarda mucho tiempo en ejecutarse. Después de todo, ahora está limitado por las velocidades de tráfico de red, que son órdenes de magnitud más lentas que las velocidades de transferencia de memoria o incluso de disco.

Si es posible, realice una sola consulta contra servidor remoto, sin unirse a una tabla local, para extraer los datos que necesita en una tabla temporal. Entonces consulta eso.

Si eso no es posible, entonces necesita mirar las diversas cosas que causarían que SQL server tuviera que cargar toda la tabla localmente. Por ejemplo usando GETDATE() o incluso ciertas uniones. Otros asesinos de rendimiento incluyen no dar los derechos apropiados.

Véase http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries / para más información.

 144
Author: NotMe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-04 02:20:40
SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')

Esto puede ayudarte.

 14
Author: Akhilesh Kamate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-16 12:18:36

Si todavía encuentra problemas con <server>.<database>.<schema>.<table>

Incluya el nombre del servidor en []

 9
Author: Mian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 12:28:20

Debe especificar el esquema/owner (dbo por defecto) como parte de la referencia. Además, sería preferible usar el nuevo estilo de unión (ANSI-92).

select foo.id 
    from databaseserver1.db1.dbo.table1 foo
        inner join databaseserver2.db1.dbo.table1 bar 
            on foo.name = bar.name
 8
Author: Joe Stefanelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-03 22:03:24

Para aquellos que tienen problemas con estas otras respuestas , try OPENQUERY

Ejemplo:

 SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 
 5
Author: Tom Stickel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 18:45:35
select * from [Server].[database].[schema].[tablename] 

Esta es la forma correcta de llamar. Asegúrese de verificar que los servidores están vinculados antes de ejecutar la consulta!

Para comprobar si hay servidores vinculados llame a:

EXEC sys.sp_linkedservers 
 3
Author: Abhishek Jaiswal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-08 19:55:51

Por lo general, las consultas directas no se deben usar en el caso del servidor vinculado porque utiliza en gran medida la base de datos temp de SQL server. En el primer paso, los datos se recuperan en temp DB y luego se produce el filtrado. Hay muchos hilos sobre esto. Es mejor usar open OPENQUERY porque pasa SQL al servidor vinculado de origen y luego devuelve resultados filtrados, por ejemplo,

SELECT *
FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')
 2
Author: Muhammad Yaseen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 15:29:38
select name from drsql01.test.dbo.employee
  • drslq01 is servernmae {linked serer
  • la prueba es el nombre de la base de datos
  • dbo es esquema-esquema predeterminado
  • el empleado es el nombre de la tabla

Espero que ayude a entender, cómo ejecutar la consulta para el servidor vinculado

 2
Author: Jaspreet Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-15 03:22:09

La siguiente consulta es trabajar mejor.

Prueba esta consulta:

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

Es muy útil vincular MySQL a MS SQL

 1
Author: Vijay S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-25 05:43:06

Por si sirve de algo, encontré la siguiente sintaxis para funcionar mejor:

SELECCIONE * DESDE [LINKED_SERVER]...[CUADRO]

No pude conseguir que las recomendaciones de otros funcionaran, usando el nombre de la base de datos. Además, esta fuente de datos no tiene esquema.

 0
Author: Sean Warren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-24 14:41:04

Haga clic con el botón derecho en una tabla y haga clic en script table como select

introduzca la descripción de la imagen aquí

 -1
Author: Shimon Doodkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-25 05:14:50