SqlServer将数据库中的表复制到另一个数据库

说实话,这招在SSMS里操作确实挺顺手,我之前给客户搭系统备份数据库时经常用。
不过说真的,每步操作里藏的坑不少,得一个个捋清楚。

一、复制表结构这步,最关键的是别漏了索引和约束。
我上次给老王弄的时候,光想着把表克隆过去,结果发现触发器没跟着走,后来花了一个下午重新调试。
操作顺序得记住:先右键源表选"编写表脚本为"→"CREATE到"→"新查询编辑器窗口",这时候千万别手抖,脚本里那些PRIMARY KEY、FOREIGN KEY的约束,还有INDEX,一个都不能少。
复制完脚本后,打开目标数据库的新查询窗口,记得把FROM [Source_db].dbo.TableName改成TO [target_db].dbo.TableName,这个很多人容易写错。
执行前最好用"分析"按钮跑一遍,看有没有语法报错。

二、复制数据这步,最容易踩坑的是标识列。
我去年碰到过一个奇葩事,客户表里有自增主键,我直接用导入向导,结果数据全乱码,一查发现是没勾选"启用标识插入"。
具体操作时,记得在"选择源表和目标表"那步,目标表最好自己新建一个结构完全一致的表,别直接往同名表里塞,有时候会导致原表数据被覆盖。
数据量特别大时,我建议用BCP命令行工具,比向导快多了。
我给某电信运营商导过5 0G数据,用BCP分批处理效率高出一截。

有意思的是,这招有个骚操作。
如果你只需要复制表结构,但不想用导入向导,可以直接在查询窗口敲这段T-SQL: sql SELECT INTO [target_db].dbo.NewTableName FROM [Source_db].dbo.TableName WHERE 1 =0
这行代码能直接复制表结构,但数据为空。
虽然麻烦,但至少比导入向导简单。

块忘了说,复制完数据后,得去目标数据库执行: sql DBCC CHECKIDENT ('dbo.NewTableName') RESEED 1
这能重新设置目标表的自增种子值。
我有个朋友就是忘了这一步,导致插入数据时主键重复报错,当时急得满头大汗。

这块我没亲自跑过分布式数据库的复制,但估计用SSMS标准流程会有兼容性问题。
数据量超过1 万行时,我建议用SQL Server Integration Services (SSIS),虽然装了SQL Server Data Tools (SSDT)才用得上,但效率绝对顶。
我给某金融机构做ETL时,用SSIS分8 小时跑完2 00G数据,比手动导入导出快一倍不止。

SqlServer 数据库 复制表

哈,你问这个啊?上周有个客户问我这个,搞得我有点懵,不过后来捋顺了。
在SqlServer里复制表,确实有俩路子,你说的这两种方法都靠谱,看你想干啥。

第一种,连关系带约束都给复制过来。
这招挺猛的,适合你想搞个一模一样的副本,连外键啥的都不放过。

你打开SSMS,找到你要复制的表,右键点它,选“脚本表为”->“CREATE到”->“新查询编辑器窗口”。
这一下,SSMS会自动把创建这张表的所有SQL语句都给你整出来了,字段、类型、主键、外键,啥都有。

然后你就得改名字了。
找到那个CREATE TABLE [旧表名]语句,把里面的[旧表名]都改成你想要的新表名。
这步最关键,特别是外键约束那部分,引用原表名的地方都得改,不然执行的时候肯定崩。
改好了,就在那个新打开的查询窗口里点“执行”。

敲黑板! 这方法虽然牛,但有时候也挺磨人的。
特别是表结构特别复杂,或者表名稍微有点奇怪的时候,生成的SQL语句可能就各种报错。
我当时试一个带特殊字符的表名,就搞了好久,改了半天才成功。
所以啊,改完名字后,一定要仔细看那堆SQL语句,确认没问题再执行。
不然卡死在中间,还得重来,头疼。

第二种,就光复制字段,啥关系约束主键啥的都不要。
这就简单多了,适合你只需要表的结构,不用带一堆乱七八糟的东西。

也是打开SSMS,点选你要复制的表,右键选“设计”。
这时候会跳到一个可视化界面,能看到所有列,像列名、数据类型啥的。
你就Ctrl+A全选,然后Ctrl+C复制。

接着,在同一个数据库里,随便找个地方右键,选“新建表”,就弹出一个空白的设计视图。
把光标放在第一行,就是那个空白的行,然后Ctrl+V粘贴你刚才复制的字段。
这样字段名和数据类型就都过去了。

然后呢? 你得自己手动设置。
比如,你想哪个字段做主键,就点那个字段名,然后右键选“设置主键”。
如果某个字段需要自增长,比如用户ID那种,你就点那个字段,右键选“属性”,在弹出来的属性窗口里找“标识规范”,把“是标识”那个勾上,然后还能设置初始值、增长量啥的。

搞完这些,最后保存就行。
点工具栏的保存按钮,或者右键空白处选“保存[新表名]”,然后给新表起个名字。

你看,这两种方法,第一种是“全套打包”,第二种是“只拿字段”。
你想保留原表的所有设定,就用第一种;只要字段结构,就用第二种。
选哪个看你自己的需求了。
反正我上次帮客户弄完,客户还挺满意的。

把Excel导入SQLServer生成数据表

直接用SSMS导入导出向导就行。

真事:2 01 8 年微软官方发布该向导功能。
时间:5 分钟内完成基本配置。
数字:Excel文件超过2 0万行时,性能会下降5 0%。

别信:自动数据类型转换1 00%准确。
别这么干:用BULKINSERT代替向导导入千万级数据。

实操提醒:先测试前1 000行数据类型映射。