2009-01-30 42 views
20

Agregué un servidor vinculado, que se muestra en la lista de servidores vinculados, pero cuando lo consulto, arroja un error con el nombre del servidor db.Consultar un servidor sql vinculado

EXEC sp_helpserver 
EXEC sp_addlinkedserver 'aa-db-dev01' 
Select * from openquery('aa-db-dev01','Select * from TestDB.dbo.users') 

Msg 102, nivel 15, estado 1, línea 1
sintaxis incorrecta cerca de 'aa-db-dev01'.

Respuesta

30
SELECT * FROM [server].[database].[schema].[table] 

Esto funciona para mí. SSMS intellisense aún puede subrayar esto como un error de sintaxis, pero debería funcionar si su servidor vinculado está configurado y su consulta es correcta.

+0

De las pruebas que he hecho, mientras que nombres 4Part funciona, termina siendo más lento que usar openquery. –

+0

También este enfoque no funcionará si la definición de su tabla contiene tipos de columna 'xml'. – Lankymart

+0

@ Hack-R es el servidor registrado como uno vinculado? –

22

Debe eliminar las comillas de todo el nombre del servidor vinculado. Debería ser así:

Seleccionar * de openquery (aa-db-dev01, 'Seleccionar * de TestDB.dbo.users')

+0

Pierdes intellisense de esta manera, así que haz lo contrario si puedes desde el punto de vista del desarrollo, pero debes usarlo si el proveedor no expone el catálogo o esquema –

+0

Con esta opción, hay un límite de 8000 caracteres para la consulta. Todavía estoy tratando de encontrar una solución para eso. 'exec (@Query) en LinkedServerName' parece una solución para eso, pero no puedo unir el resultado con otras tablas. Intenté usar tablas temporales sin suerte. –

5

Usted puede utilizar:

SELECT * FROM [aa-db-dev01].[TestDB].[dbo].[users]; 
+0

Esto NO FUNCIONA, no algunos servidores vinculados al servidor SQL, lo que resulta en ... Se especificó un esquema o catálogo no válido para el proveedor "MSDASQL" para el servidor vinculado "MyLinkedServer". – brewmanz

1

intento Select * from openquery("aa-db-dev01",'Select * from users'), la conexión de base de datos debe ser definido en vinculó configuración del servidor

1

utilizo consulta abierta para realizar esta tarea, así:

select top 1 * 
INTO [DATABASE_TO_INSERT_INTO].[dbo].[TABLE_TO_SELECT_INTO] 
from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
) 

El ejemplo anterior utiliza la consulta abierta para seleccionar datos de una base de datos en un servidor vinculado en una base de datos de su elección.

Nota: Para completar la referencia, es posible realizar una sencilla seleccionar este modo:

select top 1 * from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
) 
Cuestiones relacionadas