2008-10-09 14 views

Respuesta

187

¿En SQL Server? y en el mismo servidor de base de datos? Use el nombre de tres partes.

INSERT INTO bar..tblFoobar(*fieldlist*) 
SELECT *fieldlist* FROM foo..tblFoobar 

Esto solo mueve los datos. Si desea mover la definición de la tabla (y otros atributos como permisos e índices), tendrá que hacer algo más.

+0

También tendrá que establecer por separado permisos de mesa, creo. –

+0

Sí, e índices ... etc. –

+1

Si necesita hacer inserciones de identidad también, el Asistente de importación de datos tiene una opción para eso ^^ - refiriéndose a la otra respuesta –

90

Esto debería funcionar:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Será no constaints copia, incumplimientos o índices. La tabla creada será no tiene un índice agrupado.

otra posibilidad:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable 

Si existe la tabla de destino y está vacía.

+0

¿Hay algún problema si primero copia la estructura de la tabla base (campos y datos) y luego aplica un script * patch * para crear permisos, índices, restricciones y propiedades extendidas? – leoinfo

+3

Esto no insertará valores para columnas de identidad en SQL Server 2008. Eso solo está permitido cuando utiliza una lista de columnas y IDENTITY_INSERT está activado para la tabla de destino. –

+0

@Lucas - Estás "medio" bien :). Sin embargo, la primera instrucción SQL copia TODOS los datos, incluidos los valores dentro de las columnas de identidad. Como dije, las restricciones no se crean. Pero pueden ser fácilmente guionadas en el DB de origen y aplicarse al DB de destino una vez que se muevan todos los datos. – leoinfo

22
  1. Script, el create table en el estudio de administración, ejecute esa secuencia de comandos en la barra para crear la tabla. (Haga clic derecho en la tabla en el Explorador de objetos, mesa de script como, crear a ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

+1

Me gusta este enfoque. Sin embargo, seleccionar * no funcionará si hay una columna de identidad, necesitará enumerar explícitamente los nombres de las columnas. También deberá hacer 'SET IDENTITY_INSERT TblName ON' en ese caso. – JeremyWeir

520

SQL Server Management Studio de tarea "Importar datos" (botón derecho del ratón sobre el nombre de DB, entonces tareas) hará la mayor parte de esto por ti. Ejecútelo desde la base de datos en la que desea copiar los datos.

Si las tablas no existen, las creará para usted, pero es probable que deba volver a crear cualquier índice y tal. Si las tablas existen, agregará los nuevos datos de forma predeterminada, pero puede ajustar eso (editar asignaciones) para que elimine todos los datos existentes.

Uso esto todo el tiempo y funciona bastante bien.

+1

parece que no puedo encontrar esta opción. ¿Hay alguna versión específica aquí? – Nerrve

+2

parece estar solo disponible en la edición de 2008 – Nerrve

+32

Realmente no se puede decir que sea una mejor respuesta en general. No se puede utilizar para la automatización desde un script, por ejemplo. Por cierto, el autor pidió específicamente una "declaración de SQL ...". Pero, por supuesto, es una gran respuesta, pero no una mejor;). – grizzly

15

También puede utilizar el Generate SQL Server Scripts Wizard para ayudar a guiar la creación del guión de SQL que se puede hacer lo siguiente:

  • copiar el esquema de la tabla
  • cualquier restricción (identidad, valores por defecto, etc)
  • datos dentro de la tabla
  • y muchas otras opciones si es necesario

Buen flujo de trabajo de ejemplo para SQL Server 2008 con capturas de pantalla mostradas here.

+0

Ver mis comentarios arriba: "¿Cómo obtuvo esto 508/171 Votos y Ryan?" 11 de octubre de 2011 a las 23:41 "¿Responder solo obtener 13 hasta la fecha?!? Ryan es la * única respuesta * que la respuesta es la op . * completamente *. * Porque * maneja estos escenarios (que, por cierto, el OP NO excluía de su q.): a) Identidad (* muy * común), b) Restricciones, c) Disparadores, d) Índices, e) Permisos, d) copiar Esquema Y Datos (Sugerencia: la parte "y todos" de las operaciones "(datos y todo)" también implica el Esquema.) y e) genera una "declaración SQL" que especificó el operador incluso si no quiso decir que literalmente es mejor tener que no ". – Tom

+0

Nota: Esta respuesta solo es práctica cuando # de Filas no son "excesivas" (es decir, tablas de búsqueda/transacción pequeña) y no hay valores de columna "grandes". Para ellos, usaría la Respuesta de Ryan solo para generar el Script para la Creación de Tabla (incluyendo Atributos de Columna y subobjetos), y luego usaría la Respuesta "Insertar en Seleccionar" de David B. Para tablas individuales (en lugar de Ryan's A), también puede usar SSMS, Object Explorer, Right-Click Table, Script Table as, CREATE To, pero primero debe asegurarse de que Tools, Options, SQL Server Object Explorer, las opciones de scripting sean establecer como deseado. – Tom

8

Usted puede ir con esta forma: (un ejemplo general)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB) 
Select columnA, columnB from DeveloperDB.dbo.Customers 

Además, si usted necesita para generar los nombres de columna, así que poner en la cláusula de inserción, utilice:

select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') 

Copiar el resultado y pegar en la ventana de consulta para representar los nombres de columna de la tabla e incluso esto excluirá la columna de identidad también:

select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0 

Recuerde que la secuencia de comandos para copiar filas funcionará si las bases de datos pertenecen a la misma ubicación.


Puede intentarlo.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable> 

El nombre del servidor es opcional si ambos DB están en el mismo servidor.

44

Si se trata de una tabla sólo entonces todo lo que necesita hacer es

  • Guión definición de la tabla
  • Crear nueva tabla en otra base de datos
  • reglas Actualizar, índices, permisos y dichos datos de importación
  • (varios insertar en ejemplos ya se muestran arriba)

Una cosa que tendrá que considerar es oth actualizaciones de er, como la migración de otros objetos en el futuro. Tenga en cuenta que sus tablas de origen y de destino no tienen el mismo nombre. Esto significa que también deberá realizar cambios si tiene objetos dependientes, como vistas, procedimientos almacenados y otros.

Con uno o más objetos puede ir manualmente sin problemas. Sin embargo, cuando hay más que unas pocas actualizaciones, las herramientas de comparación de terceros son muy útiles. En este momento estoy usando ApexSQL Diff para las migraciones de esquema, pero no se puede equivocar con ninguna otra herramienta que exista.

0

de datos de copia

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details 
1

Si hay tabla existente y que quiere copiar sólo los datos, podemos tratar esta consulta.

inserción en Destination_Existing_Tbl seleccionar col1, col2 DE Source_Tbl

Cuestiones relacionadas