tipos subconsultas sp_addlinkedserver servidores inner entre ejemplos datos consultas consulta sql sql-server

subconsultas - Seleccionando datos de dos servidores diferentes en SQL Server



sp_addlinkedserver (14)

Consultar en 2 bases de datos diferentes es una consulta distribuida. Aquí hay una lista de algunas técnicas más los pros y los contras:

  1. Servidores vinculados: proporcionan acceso a una variedad más amplia de orígenes de datos que la replicación de SQL Server.
  2. Servidores vinculados: conecte con fuentes de datos que la replicación no admita o que requieran acceso ad hoc
  3. Servidores vinculados: funcionan mejor que OPENDATASOURCE o OPENROWSET
  4. Funciones de OPENDATASOURCE y OPENROWSET : Convenientes para recuperar datos de fuentes de datos sobre una base ad hoc. OPENROWSET tiene también instalaciones a GRANEL que pueden / no requerir un archivo de formato que podría ser fiddley
  5. OPENQUERY : No soporta variables
  6. Todas son soluciones T-SQL. Relativamente fácil de implementar y configurar
  7. Todos dependen de la conexión entre la fuente y la destrucción, lo que puede afectar el rendimiento y la escalabilidad

¿Cómo puedo seleccionar datos en la misma consulta de dos bases de datos diferentes que están en dos servidores diferentes en SQL Server?


Creó una definición de servidor vinculado en un servidor al otro (necesita SA para hacer esto), luego haga referencia a ellos con nombres de 4 partes (vea el BOL).


Estas son todas las respuestas correctas, pero esta falta y tiene sus propios usos poderosos. Posiblemente no se ajuste a lo que quería el OP, pero la pregunta era vaga y creo que otros pueden encontrar su camino aquí. Básicamente, puede usar 1 ventana para ejecutar simultáneamente una consulta en múltiples servidores, aquí le indicamos cómo:

En SSMS, abra los servidores registrados y cree un nuevo grupo de servidores en Grupos de servidores locales .

En este grupo, cree un nuevo registro de servidor para cada servidor que desee consultar. Si los nombres de la base de datos son diferentes, asegúrese de establecer un valor predeterminado para cada uno en las propiedades.

Ahora vuelva al grupo que creó en el primer paso, haga clic con el botón derecho y seleccione Nueva consulta. Se abrirá una nueva ventana de consulta y cualquier consulta que ejecute se ejecutará en cada servidor del grupo. Los resultados se presentan en un solo conjunto de datos con un nombre de columna adicional que indica de qué servidor proviene el registro. Si usa la barra de estado, notará que el nombre del servidor se reemplaza por múltiple .


Objetos del servidor ---> servidor vinculado ---> nuevo servidor vinculado

En el servidor vinculado, escriba el nombre del servidor o la dirección IP para otro servidor y elija SQL Server En Seguridad seleccione (se hará usando este contexto de seguridad) Escriba el nombre de usuario y la contraseña para otro servidor

Ahora conectado entonces use

Select * from [server name or ip addresses ].databasename.dbo.tblname


Puedes hacerlo usando el servidor vinculado.

Normalmente, los servidores vinculados están configurados para permitir que el Motor de base de datos ejecute una declaración Transact-SQL que incluya tablas en otra instancia de SQL Server u otro producto de base de datos como Oracle. Muchos tipos de orígenes de datos OLE DB se pueden configurar como servidores vinculados, incluidos Microsoft Access y Excel.

Los servidores vinculados ofrecen las siguientes ventajas:

  • La capacidad de acceder a datos desde fuera de SQL Server.
  • La capacidad de emitir consultas distribuidas, actualizaciones, comandos y transacciones en fuentes de datos heterogéneas en toda la empresa.
  • La capacidad de abordar diversas fuentes de datos de manera similar.

Lea más acerca de los servidores vinculados .

Siga estos pasos para crear un servidor vinculado:

  1. Objetos de servidor -> Servidores vinculados -> Nuevo servidor vinculado

  2. Proporcione el nombre del servidor remoto.

  3. Seleccione el tipo de servidor remoto (SQL Server u otro).

  4. Seleccione Seguridad -> Realícese utilizando este contexto de seguridad y proporcione el inicio de sesión y la contraseña del servidor remoto.

  5. Haga clic en Aceptar y ya está!

Here hay un tutorial simple para crear un servidor vinculado.

O

Puede agregar servidor vinculado mediante consulta.

Sintaxis:

sp_addlinkedserver [ @server= ] ''server'' [ , [ @srvproduct= ] ''product_name'' ] [ , [ @provider= ] ''provider_name'' ] [ , [ @datasrc= ] ''data_source'' ] [ , [ @location= ] ''location'' ] [ , [ @provstr= ] ''provider_string'' ] [ , [ @catalog= ] ''catalog'' ]

Lea más sobre sp_addlinkedserver .

Tienes que crear el servidor vinculado una sola vez . Después de crear el servidor vinculado, podemos consultarlo de la siguiente manera:

select * from LinkedServerName.DatabaseName.OwnerName.TableName


Sé que esta es una vieja pregunta pero uso sinónimos. Supuestamente, la consulta se ejecuta dentro del servidor de base de datos A, y busca una tabla en un servidor de base de datos B que no existe en el servidor A. Agregue un sinónimo en una base de datos que llame a su tabla desde el servidor B. Su consulta no tiene que incluya cualquier esquema, o nombres de bases de datos diferentes, simplemente llame al nombre de la tabla como de costumbre y funcionará.

No hay necesidad de vincular los servidores, ya que los sinónimos, por ejemplo, son una especie de vinculación.


Sí tu puedes.

Creo que estás preguntando cómo, así que contestaré eso.

Lo que buscas son servidores enlazados. Puede acceder a ellos en SSMS desde la siguiente ubicación en el árbol del Explorador de objetos:

Server Objects-->Linked Servers

o puede usar sp_addlinkedserver .

Sólo tienes que configurar uno. Una vez que tenga eso, puede llamar a una tabla en el otro servidor así:

select * from LocalTable, [OtherServerName].[OtherDB].[dbo].[OtherTable]

Tenga en cuenta que el propietario no siempre es dbo , así que asegúrese de reemplazarlo con cualquier esquema que use.


Servidor 2008:

Cuando esté en SSMS conectado a server1.DB1 e intente:

SELECT * FROM [server2].[DB2].[dbo].[table1]

como han dicho otros, si no funciona es porque el servidor no está vinculado.

Me sale el error

No se pudo encontrar el servidor DB2 en sys.servers. Verifique que se haya especificado el nombre de servidor correcto. Si es necesario, ejecute el procedimiento almacenado sp_addlinkedserver para agregar el servidor a sys.servers.

Para agregar el servidor:

referencia: para agregar un servidor usando sp_addlinkedserver Enlace: [1]: para agregar un servidor usando sp_addlinkedserver

Para ver lo que hay en tus sys.servers solo consulta:

SELECT * FROM [sys].[servers]


Solución simplificada para agregar servidores enlazados

Primer servidor

EXEC sp_addlinkedserver @server=''ip,port/instancename''

Segundo inicio de sesión

EXEC sp_addlinkedsrvlogin ''ip,port/instancename'', ''false'', NULL, ''remote_db_loginname'', ''remote_db_pass''

Ejecutar consultas de enlace a db local

INSERT INTO Tbl (Col1, Col2, Col3) SELECT Col1, Col2, Col3 FROM [ip,port/instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]


prueba esto:

SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=YOUR SERVER;Trusted_Connection=yes;'',''SELECT * FROM Table1'') AS a UNION SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=ANOTHER SERVER;Trusted_Connection=yes;'',''SELECT * FROM Table1'') AS a


Tuve el mismo problema para conectar un SQL_server 2008 a un SQL_server 2016 alojado en un servidor remoto. Otras respuestas no funcionaron para mí directamente. Escribo mi solución ajustada aquí porque creo que puede ser útil para otra persona.

Una respuesta extendida para conexiones db IP remotas:

Paso 1: enlace servidores

EXEC sp_addlinkedserver @server=''SRV_NAME'', @srvproduct=N'''', @provider=N''SQLNCLI'', @datasrc=N''aaa.bbb.ccc.ddd''; EXEC sp_addlinkedsrvlogin ''SRV_NAME'', ''false'', NULL, ''your_remote_db_login_user'', ''your_remote_db_login_password''

... donde SRV_NAME es un nombre inventado. Lo usaremos para referirnos al servidor remoto de nuestras consultas. aaa.bbb.ccc.ddd es la dirección IP del servidor remoto que aloja su base de datos aaa.bbb.ccc.ddd Server.

Paso 2: Ejecute sus consultas Por ejemplo:

SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table

...¡y eso es!

Detalles de la sintaxis: sp_addlinkedserver y sp_addlinkedsrvlogin


select * from [ServerName(IP)].[DatabaseName].[dbo].[TableName]


SELECT * FROM [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]

También puede mirar utilizando servidores vinculados. Los servidores vinculados también pueden ser otros tipos de fuentes de datos, como las plataformas DB2. Este es un método para intentar acceder a DB2 desde una llamada a SQL Server TSQL o Sproc ...


sp_addlinkedserver(''servername'')

así que debería irse así ...

select * from table1 unionall select * from [server1].[database].[dbo].[table1]