sintaxis open linked link into crear consulta sql-server insert linked-server

sql-server - open - select linked server sql server



error cuando se inserta en el servidor vinculado (3)

La SELECT...INTO [new_table_name] admite un máximo de 2 prefijos: [database].[schema].[table]

NOTA: es más eficaz tirar de los datos a través del enlace usando SELECT INTO vs. empujarlo usando INSERT INTO :

  1. SELECT INTO está mínimamente registrado.
  2. SELECT INTO no inicia implícitamente una transacción distribuida, por lo general.

Digo típicamente, en el punto n. ° 2, porque en la mayoría de los escenarios, una transacción distribuida no se crea implícitamente cuando se usa SELECT INTO . Si un rastreo del generador de perfiles indica que SQL Server todavía está creando implícitamente una transacción distribuida, puede SELECT INTO una tabla temporal primero, para evitar la transacción distribuida implícita, luego mover los datos a su tabla de destino desde la tabla temporal.

Ejemplo de empuje frente a extracción
En este ejemplo, estamos copiando datos de [server_a] a [server_b] a través de un enlace. Este ejemplo asume que la ejecución de consultas es posible desde ambos servidores:

empujar
En lugar de conectarse a [server_a] y enviar los datos a [server_b]:

INSERT INTO [server_b].[database].[schema].[table] SELECT * FROM [database].[schema].[table]

Halar
Conéctese a [server_b] y extraiga los datos de [server_a]:

SELECT * INTO [database].[schema].[table] FROM [server_a].[database].[schema].[table]

Quiero insertar algunos datos en el servidor local en un servidor remoto, y utilicé el siguiente sql:

select * into linkservername.mydbname.dbo.test from localdbname.dbo.test

Pero arroja el siguiente error

El nombre del objeto ''nombre del servidor de enlaces.mydbname.dbo.test'' contiene más que el número máximo de prefijos. El máximo es 2.

¿Cómo puedo hacer eso?


No creo que la nueva tabla creada con la cláusula INTO compatible con 4 nombres de partes. Primero necesitaría crear la tabla, luego usar INSERT..SELECT para completarla.

(Consulte la nota en la sección Argumentos en MSDN: referencia )


He experimentado el mismo problema y realicé la siguiente solución: si puede iniciar sesión en el servidor remoto donde desea insertar datos con MSSQL o sqlcmd y reconstruir su consulta, viceversa:

así que de:

SELECT * INTO linkservername.mydbname.dbo.test FROM localdbname.dbo.test

a lo siguiente:

SELECT * INTO localdbname.dbo.test FROM linkservername.mydbname.dbo.test

En mi situación, funciona bien.

@ 2Toad: Por supuesto, INSERT INTO es mejor / más eficiente. Sin embargo, para consultas pequeñas y operación rápida, SELECT * INTO es más flexible porque crea la tabla sobre la marcha e inserta sus datos inmediatamente, mientras que INSERT INTO requiere la creación de una tabla (opciones de autoidentificación, etc.) antes de llevar a cabo su operación de inserción.