我在Microsoft SQL Server Management Studio的数据库(称其为A_db)中有一个表(称其为A_table),有10行。

我有另一个数据库(称为B_db),它有一个表(称为B_table),它具有与A_table相同的列设置。但是B_table是空的。

我想要的是:

将A_table中的每一行复制到B_table中。

在Microsoft SQL Server Management Studio 2012中是否有任何选项可以从表中创建插入SQL ?或者还有其他选择吗?


当前回答

命令从linux机器终端获取数据库备份。

sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [demodb] TO DISK = N'/var/opt/mssql/data/demodb.bak' WITH NOFORMAT, NOINIT, NAME = 'demodb-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

在Linux操作系统下备份和恢复SQL Server数据库

其他回答

我们只需要使用下面的查询将一个表的数据转储到另一个表。

Select * into SampleProductTracking_tableDump
from SampleProductTracking;

SampleProductTracking_tableDump是一个将自动创建的新表 当使用与上述查询。 它将记录从SampleProductTracking复制到SampleProductTracking_tableDump

我知道这是一个老问题,但victorio还问是否有其他选项可以将数据从一个表复制到另一个表。有一种非常短且快速的方法可以将所有记录从一个表插入到另一个表(它们的设计可能相似,也可能不同)。

如果在表B_table中没有标识列:

INSERT INTO A_db.dbo.A_table
SELECT * FROM B_db.dbo.B_table

如果在表B_table中有标识列,则必须指定要插入的列。基本上,您可以选择除标识列之外的所有列,默认情况下,标识列将自动递增。

如果你没有现有的B_table在B_db

SELECT *
INTO B_db.dbo.B_table
FROM A_db.dbo.A_table

将创建表B_table在数据库B_db与所有现有的值

简单快捷的方法:

右击数据库 在SSMS 2017中,您需要忽略第2步-生成脚本选项位于上下文菜单的顶层。 选择生成脚本 单击next 选择表 单击next 单击高级 滚动到脚本的数据类型-在SMSS 2014中调用脚本的数据类型感谢Ellesedil的评论 只选择数据 点击“确定”关闭高级脚本选项窗口 单击下一步并生成脚本

我通常在这种情况下生成一个新的查询编辑器窗口,然后在需要的地方做任何修改。

到目前为止,我还没有在Microsoft SQL Server Management Studio 2012中看到任何选项会这样做。

我相信只要有时间,您可以用T-SQL编写一些东西。

检查蛤蟆从任务-现在由戴尔拥有。

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”

toad的优点是,它可以同时使用SQL server和Oracle。如果你必须兼顾两者,这是一项很好的投资。

我写了这个T-SQL代码,它允许生成一个导入脚本(使用自sql server 2016以来可用的压缩/解压缩功能) 这个脚本可以导出为xml, xml转换为varbinay,这个varbinay压缩。

declare @tablename  nvarchar(255) = 'dbo.toto'

-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------

set nocount on

declare @codetab        nvarchar(255) = replace(replace(replace(replace(@tablename,' ','_'), '.','_'),'[', ''),']', '')
declare @nl             nvarchar(2)= char(10) -- + char(13)
declare @tab            nvarchar(1)= char(9)
declare @export         nvarchar(max)
declare @exportcompress nvarchar(max)
declare @sqlgenxml      nvarchar(max)
declare @sqlimport      nvarchar(max) 
declare @sqlstruct      nvarchar(max)
declare @sqlinsert      nvarchar(max)
declare @nbcarmax       int
declare @index          int = 0
declare @cc             int = 0
declare @maxsize        int = 1024

declare @struct table (
    name               nvarchar(255),
    codename           nvarchar(255),
    col_id             int,
    is_nullable        int,
    is_identity_column int,
    is_updateable      int,
    type               nvarchar(255)
)

insert into @struct (name, col_id, type, is_nullable, is_identity_column, is_updateable) 
select
    name,
    column_ordinal,
    system_type_name,
    is_nullable,
    is_identity_column,
    is_updateable
from
    sys.dm_exec_describe_first_result_set('select * from '+@tablename, NULL, 0)

update @struct set codename = replace(replace(replace(replace(name,' ','_'), '.','_'),'[', ''),']', '')

select @nbcarmax=max(len(codename)) from @struct
select @sqlgenxml = coalesce(@sqlgenxml + @tab + ',', @tab + ' ')+ name + replicate(' ', @nbcarmax-len(codename)+3)+' as ' +QUOTENAME(codename)+@nl from @struct order by col_id
select @sqlstruct = coalesce(@sqlstruct + @tab + ',', @tab + ' ')+ quotename(name) + replicate(' ', @nbcarmax-len(codename)+3)+type+case when is_identity_column=1 then ' identity(1,1)' else '' end +@nl from @struct order by col_id
select @sqlinsert = coalesce(@sqlinsert + '--'+ @tab + ',', '--'+@tab + ' ')+ quotename(name) + @nl from @struct order by col_id

set @sqlgenxml = 'set @s =(select'+@nl+@sqlgenxml+'from'+@tab+@tablename+@nl+'for xml path(''row''), root('''+@codetab+'''))'+@nl

exec sp_executesql @sqlgenxml, N'@s nvarchar(max) output', @s=@export output

select @exportcompress = convert(nvarchar(max), COMPRESS(cast(@export as varbinary(max))), 1)


print 'set nocount on'+@nl+@nl
    + '/*'+@nl
    + 'create table '+@tablename+' ('+@nl
    + @sqlstruct 
    + ')' + @nl
    + '*/'+@nl + @nl
    +@nl
    +'declare @import nvarchar(max) ='''''+@nl
    +'declare @xml xml'+@nl
    +@nl
    +'declare @importtab table ('+@nl
    +@tab+'id  int identity(1,1),'+@nl
    +@tab+'row nvarchar(max)'+@nl
    +')'+@nl
    +@nl

while @index<LEN(@exportcompress)
begin
    set @cc+=1
    print 'insert into @importtab (row) values ('''+SUBSTRING(@exportcompress, @index, @maxsize)+''') --'+CAST(@cc as varchar(10))
    set @index+=@maxsize
end

print @nl
    +'select @import += row from @importtab order by id'+@nl
    +'select @import = cast(decompress(convert(varbinary(max), @import, 1)) as nvarchar(max))'+@nl
    + @nl
    +'set @xml=cast(@import as xml)'+@nl
    + @nl

select 
    @sqlimport = 
          coalesce(@sqlimport+@tab+',',@tab+' ')
        + 't.row.value(''./'+codename+'[1]'','
        + replicate(' ', @nbcarmax-len(codename)+3)
        + ''''+type+''''
        + replicate(' ', 20-len(type))
        + ') as '+QUOTENAME(name) 
        +  @nl 
from 
    @struct
set @sqlimport='select'+@nl+@sqlimport+'from'+@nl+@tab+'@xml.nodes(''/'+@codetab+'/row'') as t(row)'

print '-- truncate table '+@tablename+@nl

if exists(select top 1 1 from @struct where is_identity_column = 1)
print '-- set identity_insert '+@tablename+' on'+@nl

print '-- insert into '+@tablename+' ('+@nl+@sqlinsert+'-- )'+@nl+@sqlimport+@nl

if exists(select top 1 1 from @struct where is_identity_column = 1)
print '-- set identity_insert '+@tablename+' off'+@nl

下面您可以看到这个脚本生成的示例(从SSMS结果文本复制/粘贴)

set nocount on

/*
create table dbo.toto (
     [id]           int identity(1,1)
    ,[code]         nvarchar(10)
    ,[value]        numeric(18,9)
    ,[creationdt]   datetime
)
*/


declare @import nvarchar(max) =''
declare @xml xml

declare @importtab table (
    id  int identity(1,1),
    row nvarchar(max)
)


insert into @importtab (row) values ('0x1F8B0800000000000400E4DDD16E246B9A5EE...DE52') --1
...
insert into @importtab (row) values ('890639F9...69A8C486F8405') --3140

select @import += row from @importtab order by id
select @import = cast(decompress(convert(varbinary(max), @import, 1)) as nvarchar(max))

set @xml=cast(@import as xml)


-- truncate table dbo.toto

-- set identity_insert dbo.toto on

-- insert into dbo.toto (
--   [id]
--  ,[code]
--  ,[value]
--  ,[creationdt]
-- )
select
     t.row.value('./id[1]',           'int'                 ) as [id]
    ,t.row.value('./code[1]',         'nvarchar(10)'        ) as [code]
    ,t.row.value('./value[1]',        'numeric(18,9)'       ) as [value]
    ,t.row.value('./creationdt[1]',   'datetime'            ) as [creationdt]
from
    @xml.nodes('/dbo_toto/row') as t(row)

-- set identity_insert dbo.toto off

你会发现有用的