plano - ¿Cómo exportar todos los datos de la tabla a un formato sql insertable?
importar archivo csv a sql server (5)
Manera rápida y fácil:
- Haga clic derecho en la base
- Señalar
tasks
- Seleccionar
generate scripts
- Haga clic en Siguiente
- Elige tablas
- Haga clic en Siguiente
- Haga clic avanzado
- Desplácese a
data to script
:types of data to script
llamadostypes of data to script
en SMSS 2014 Gracias a Ellesedil por comentar - Seleccionar
data only
- Haga clic en ''Ok'' para cerrar la ventana de opciones de script avanzadas
- Haga clic en Siguiente y genere su script
Normalmente, en casos como este, genero una nueva ventana del editor de consultas y luego hago cualquier modificación donde sea necesario.
Tengo una tabla ( A_table
) en una base de datos ( A_db
) en Microsoft SQL Server Management Studio, y hay 10 filas.
Tengo otra base de datos ( B_db
) y tiene una tabla ( B_table
), que tiene la misma configuración de columna que tiene A_table
. Pero la B_table
está vacía.
Lo que quiero:
- Copie todas las filas de
A_table
aB_table
.
¿Existe alguna opción en Microsoft SQL Server Management Studio 2012 para crear una inserción SQL desde una tabla? ¿O hay alguna otra opción para hacer eso?
No he visto ninguna opción en Microsoft SQL Server Management Studio 2012 hasta la fecha que haga eso.
Estoy seguro de que puedes escribir algo en T-SQL dado el tiempo.
Echa un vistazo a TOAD de QUEST , ahora propiedad de DELL.
http://www.toadworld.com/products/toad-for-oracle/f/10/t/9778.aspx
Select your rows.
Rt -click -> Export Dataset.
Choose Insert Statement format
Be sure to check “selected rows only”
Lo bueno de sapo, funciona tanto con el servidor SQL como con Oracle. Si tiene que trabajar con ambos, es una buena inversión.
Otra forma de volcar datos como archivo de la tabla mediante DumpDataFromTable sproc
EXEC dbo.DumpDataFromTable
@SchemaName = ''dbo''
,@TableName = ''YourTableName''
,@PathOut = N''c:/tmp/scripts/' -- folder must exist !!!''
Nota: SQL debe tener permiso para crear archivos, si no está configurado, entonces exec sigue línea una vez
EXEC sp_configure ''Ole Automation Procedures'', 1; RECONFIGURE WITH OVERRIDE;
Con este script, puede llamar al sproc: DumpDataFromTable.sql y volcar más tablas de una vez, en lugar de hacerlo una a una manualmente desde Management Studio
Por defecto, el formato del scrip generado será como
INSERT INTO <TableName> SELECT <Values>
O puede cambiar el formato generado en
SELECT ... FROM
estableciendo la variable @BuildMethod = 2
código de sproc completo:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[DumpDataFromTable]'') AND type in (N''P'', N''PC''))
DROP PROCEDURE dbo.[DumpDataFromTable]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Oleg Ciobanu
-- Create date: 20171214
-- Version 1.0
-- Description:
-- dump data in 2 formats
-- @BuildMethod = 1 INSERT INTO format
-- @BuildMethod = 2 SELECT * FROM format
--
-- SQL must have permission to create files, if is not set-up then exec follow line once
-- EXEC sp_configure ''Ole Automation Procedures'', 1; RECONFIGURE WITH OVERRIDE;
--
-- =============================================
CREATE PROCEDURE [dbo].[DumpDataFromTable]
(
@SchemaName nvarchar(128) --= ''dbo''
,@TableName nvarchar(128) --= ''testTable''
,@WhereClause nvarchar (1000) = '''' -- must start with AND
,@BuildMethod int = 1 -- taking values 1 for INSERT INTO forrmat or 2 for SELECT from value Table
,@PathOut nvarchar(250) = N''c:/tmp/scripts/' -- folder must exist !!!''
,@AsFileNAme nvarchar(250) = NULL -- if is passed then will use this value as FileName
,@DebugMode int = 0
)
AS
BEGIN
SET NOCOUNT ON;
-- run follow next line if you get permission deny for sp_OACreate,sp_OAMethod
-- EXEC sp_configure ''Ole Automation Procedures'', 1; RECONFIGURE WITH OVERRIDE;
DECLARE @Sql nvarchar (max)
DECLARE @SqlInsert nvarchar (max) = ''''
DECLARE @Columns nvarchar(max)
DECLARE @ColumnsCast nvarchar(max)
-- cleanUp/prepraring data
SET @SchemaName = REPLACE(REPLACE(@SchemaName,''['',''''),'']'','''')
SET @TableName = REPLACE(REPLACE(@TableName,''['',''''),'']'','''')
SET @AsFileNAme = NULLIF(@AsFileNAme,'''')
SET @AsFileNAme = REPLACE(@AsFileNAme,''.'',''_'')
SET @AsFileNAme = COALESCE(@PathOut + @AsFileNAme + ''.sql'', @PathOut + @SchemaName + ISNULL(''_'' + @TableName,N'''') + ''.sql'')
--debug
IF @DebugMode = 1
print @AsFileNAme
-- Create temp SP what will be responsable for generating script files
DECLARE @PRC_WritereadFile VARCHAR(max) =
''IF EXISTS (SELECT * FROM sys.objects WHERE type = ''''P'''' AND name = ''''PRC_WritereadFile'''')
BEGIN
DROP Procedure PRC_WritereadFile
END;''
EXEC (@PRC_WritereadFile)
-- ''
SET @PRC_WritereadFile =
''CREATE Procedure PRC_WritereadFile (
@FileMode INT -- Recreate = 0 or Append Mode 1
,@Path NVARCHAR(1000)
,@AsFileNAme NVARCHAR(500)
,@FileBody NVARCHAR(MAX)
)
AS
DECLARE @OLEResult INT
DECLARE @FS INT
DECLARE @FileID INT
DECLARE @hr INT
DECLARE @FullFileName NVARCHAR(1500) = @Path + @AsFileNAme
-- Create Object
EXECUTE @OLEResult = sp_OACreate ''''Scripting.FileSystemObject'''', @FS OUTPUT
IF @OLEResult <> 0 BEGIN
PRINT ''''Scripting.FileSystemObject''''
GOTO Error_Handler
END
IF @FileMode = 0 BEGIN -- Create
EXECUTE @OLEResult = sp_OAMethod @FS,''''CreateTextFile'''',@FileID OUTPUT, @FullFileName
IF @OLEResult <> 0 BEGIN
PRINT ''''CreateTextFile''''
GOTO Error_Handler
END
END ELSE BEGIN -- Append
EXECUTE @OLEResult = sp_OAMethod @FS,''''OpenTextFile'''',@FileID OUTPUT, @FullFileName, 8, 0 -- 8- forappending
IF @OLEResult <> 0 BEGIN
PRINT ''''OpenTextFile''''
GOTO Error_Handler
END
END
EXECUTE @OLEResult = sp_OAMethod @FileID, ''''WriteLine'''', NULL, @FileBody
IF @OLEResult <> 0 BEGIN
PRINT ''''WriteLine''''
GOTO Error_Handler
END
EXECUTE @OLEResult = sp_OAMethod @FileID,''''Close''''
IF @OLEResult <> 0 BEGIN
PRINT ''''Close''''
GOTO Error_Handler
END
EXECUTE sp_OADestroy @FS
EXECUTE sp_OADestroy @FileID
GOTO Done
Error_Handler:
DECLARE @source varchar(30), @desc varchar (200)
EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
PRINT ''''*** ERROR ***''''
SELECT OLEResult = @OLEResult, hr = CONVERT (binary(4), @hr), source = @source, description = @desc
Done:
'';
-- ''
EXEC (@PRC_WritereadFile)
EXEC PRC_WritereadFile 0 /*Create*/, '''', @AsFileNAme, ''''
;WITH steColumns AS (
SELECT
1 as rn,
c.ORDINAL_POSITION
,c.COLUMN_NAME as ColumnName
,c.DATA_TYPE as ColumnType
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE 1 = 1
AND c.TABLE_SCHEMA = @SchemaName
AND c.TABLE_NAME = @TableName
)
--SELECT *
SELECT
@ColumnsCast = ( SELECT
CASE WHEN ColumnType IN (''date'',''time'',''datetime2'',''datetimeoffset'',''smalldatetime'',''datetime'',''timestamp'')
THEN
''convert(nvarchar(1001), s.['' + ColumnName + '']'' + '' , 121) AS ['' + ColumnName + ''],''
--,convert(nvarchar, [DateTimeScriptApplied], 121) as [DateTimeScriptApplied]
ELSE
''CAST(s.['' + ColumnName + '']'' + '' AS NVARCHAR(1001)) AS ['' + ColumnName + ''],''
END
as ''data()''
FROM
steColumns t2
WHERE 1 =1
AND t1.rn = t2.rn
FOR xml PATH('''')
)
,@Columns = ( SELECT
''['' + ColumnName + ''],'' as ''data()''
FROM
steColumns t2
WHERE 1 =1
AND t1.rn = t2.rn
FOR xml PATH('''')
)
FROM steColumns t1
-- remove last char
IF lEN(@Columns) > 0 BEGIN
SET @Columns = SUBSTRING(@Columns, 1, LEN(@Columns)-1);
SET @ColumnsCast = SUBSTRING(@ColumnsCast, 1, LEN(@ColumnsCast)-1);
END
-- debug
IF @DebugMode = 1 BEGIN
print @ColumnsCast
print @Columns
select @ColumnsCast , @Columns
END
-- build unpivoted Data
SET @SQL = ''
SELECT
u.rn
, c.ORDINAL_POSITION as ColumnPosition
, c.DATA_TYPE as ColumnType
, u.ColumnName
, u.ColumnValue
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn,
''
+ CHAR(13) + @ColumnsCast
+ CHAR(13) + ''FROM ['' + @SchemaName + ''].['' + @TableName + ''] s''
+ CHAR(13) + ''WHERE 1 = 1''
+ CHAR(13) + COALESCE(@WhereClause,'''')
+ CHAR(13) + '') tt
UNPIVOT
(
ColumnValue
FOR ColumnName in (
'' + CHAR(13) + @Columns
+ CHAR(13)
+ ''
)
) u
LEFT JOIN INFORMATION_SCHEMA.COLUMNS c ON c.COLUMN_NAME = u.ColumnName
AND c.TABLE_SCHEMA = ''''''+ @SchemaName + ''''''
AND c.TABLE_NAME = '''''' + @TableName +''''''
ORDER BY u.rn
, c.ORDINAL_POSITION
''
-- debug
IF @DebugMode = 1 BEGIN
print @Sql
END
EXEC (@Sql)
-- prepare data for cursor
IF OBJECT_ID(''tempdb..#tmp'') IS NOT NULL
DROP TABLE #tmp
CREATE TABLE #tmp
(
rn bigint
,ColumnPosition int
,ColumnType varchar (128)
,ColumnName varchar (128)
,ColumnValue nvarchar (2000) -- I hope this size will be enough for storring values
)
SET @Sql = ''INSERT INTO #tmp '' + CHAR(13) + @Sql
-- debug
IF @DebugMode = 1 BEGIN
print @Sql
END
EXEC (@Sql)
IF @DebugMode = 1 BEGIN
SELECT * FROM #tmp
END
DECLARE @rn bigint
,@ColumnPosition int
,@ColumnType varchar (128)
,@ColumnName varchar (128)
,@ColumnValue nvarchar (2000)
,@i int = -1 -- counter/flag
,@ColumnsInsert varchar(max) = NULL
,@ValuesInsert nvarchar(max) = NULL
DECLARE cur CURSOR FOR
SELECT rn, ColumnPosition, ColumnType, ColumnName, ColumnValue
FROM #tmp
ORDER BY rn, ColumnPosition -- note order is really important !!!
OPEN cur
FETCH NEXT FROM cur
INTO @rn, @ColumnPosition, @ColumnType, @ColumnName, @ColumnValue
IF @BuildMethod = 1
BEGIN
SET @SqlInsert = ''''
END
ELSE BEGIN
SET @SqlInsert = ''SELECT *''
+ CHAR(13) + ''FROM (''
+ CHAR(13) + ''VALUES''
EXEC PRC_WritereadFile 1 /*Add*/, '''', @AsFileNAme, @SqlInsert
SET @SqlInsert = NULL
END
SET @i = @rn
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@i <> @rn) -- is a new row
BEGIN
IF @BuildMethod = 1
-- build as INSERT INTO -- as Default
BEGIN
SET @SqlInsert = ''INSERT INTO ['' + @SchemaName + ''].['' + @TableName + ''] (''
+ CHAR(13) + @ColumnsInsert + '')''
+ CHAR(13) + ''VALUES (''
+ @ValuesInsert
+ CHAR(13) + '')''
END
ELSE
BEGIN
-- build as Table select
IF (@i <> @rn) -- is a new row
BEGIN
SET @SqlInsert = COALESCE(@SqlInsert + '','','''') + ''('' + @ValuesInsert+ '')''
EXEC PRC_WritereadFile 1 /*Add*/, '''', @AsFileNAme, @SqlInsert
SET @SqlInsert = '''' -- in method 2 we should clear script
END
END
-- debug
IF @DebugMode = 1
PRINT @SqlInsert
EXEC PRC_WritereadFile 1 /*Add*/, '''', @AsFileNAme, @SqlInsert
-- we have new row
-- initialise variables
SET @i = @rn
SET @ColumnsInsert = NULL
SET @ValuesInsert = NULL
END
-- build insert values
IF (@i = @rn) -- is same row
BEGIN
SET @ColumnsInsert = COALESCE(@ColumnsInsert + '','','''') + ''['' + @ColumnName + '']''
SET @ValuesInsert = CASE
-- date
--WHEN
-- @ColumnType IN (''date'',''time'',''datetime2'',''datetimeoffset'',''smalldatetime'',''datetime'',''timestamp'')
--THEN
-- COALESCE(@ValuesInsert + '','','''') + '''''''''''' + ISNULL(RTRIM(@ColumnValue),''NULL'') + ''''''''''''
-- numeric
WHEN
@ColumnType IN (''bit'',''tinyint'',''smallint'',''int'',''bigint''
,''money'',''real'','''',''float'',''decimal'',''numeric'',''smallmoney'')
THEN
COALESCE(@ValuesInsert + '','','''') + '''' + ISNULL(RTRIM(@ColumnValue),''NULL'') + ''''
-- other types treat as string
ELSE
COALESCE(@ValuesInsert + '','','''') + '''''''' + ISNULL(RTRIM(@ColumnValue),''NULL'') + ''''''''
END
END
FETCH NEXT FROM cur
INTO @rn, @ColumnPosition, @ColumnType, @ColumnName, @ColumnValue
-- debug
IF @DebugMode = 1
BEGIN
print CAST(@rn AS VARCHAR) + ''-'' + CAST(@ColumnPosition AS VARCHAR)
END
END
CLOSE cur
DEALLOCATE cur
IF @BuildMethod = 1
BEGIN
PRINT ''ignore''
END
ELSE BEGIN
SET @SqlInsert = CHAR(13) + '') AS vtable ''
+ CHAR(13) + '' ('' + @Columns
+ CHAR(13) + '')''
EXEC PRC_WritereadFile 1 /*Add*/, '''', @AsFileNAme, @SqlInsert
SET @SqlInsert = NULL
END
END
o puede descargarse desde https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts
Pruebe www.sqlscripter.com.
Por lo que yo sé, es la única herramienta que no solo crea scripts INSERT de una sola vez, sino que también puede generar INSERT y UPDATE y scripts combinados para actualizaciones frecuentes. Lo estamos usando desde hace un par de años y funciona perfecto para nosotros.
Sé que esta es una vieja pregunta, pero victorio también preguntó si hay otras opciones para copiar datos de una tabla a otra. Hay una manera muy corta y rápida de insertar todos los registros de una tabla a otra (que pueden tener o no diseño similar).
Si no tiene una columna de identidad en la tabla B_table:
INSERT INTO A_db.dbo.A_table
SELECT * FROM B_db.dbo.B_table
Si tiene una columna de identidad en la tabla B_table, debe especificar columnas para insertar. Básicamente, selecciona todos excepto la columna de identidad, que se incrementará automáticamente de forma predeterminada.
En caso de que no tenga una B_table en B_db
SELECT *
INTO B_db.dbo.B_table
FROM A_db.dbo.A_table
creará tabla B_table en la base de datos B_db con todos los valores existentes