如何生成脚本在新PC重建SQL Server 2008数据库结构(不含数据)
当然可行!我给你几个实用的方案,专门解决只复制表结构、约束、数据库关系图且不带数据的需求,比还原整个数据库高效多了:
方法1:用SSMS生成完整结构脚本(推荐)
这是最直观的方式,SQL Server Management Studio自带的脚本生成工具能精准导出你要的所有结构,完全不带数据:
- 在旧PC上打开SSMS,连接到SQL Server 2008实例,找到目标数据库
- 右键该数据库 → 任务 → 生成脚本...
- 跟着脚本向导走:
- 第一步选择「为所选数据库中的所有对象编写脚本」,点击下一步
- 到「设置脚本编写选项」时,点击高级按钮,重点调整这两个关键选项:
- 找到「要编写脚本的数据类型」,选择仅架构(这一步确保不会导出任何数据)
- 找到「编写数据库关系图脚本」,设置为True(默认是False,一定要改,不然关系图导不出来)
- 可选:把「编写CREATE DATABASE脚本」设为True,这样新PC上运行脚本会自动创建数据库,不用手动提前搭建空库
- 选择将脚本保存到本地
.sql文件,完成向导
- 把生成的
.sql文件拷贝到新PC,打开SSMS连接到目标SQL Server实例,直接运行这个脚本——数据库、表结构、约束、关系图都会自动创建好
方法2:手动生成核心结构脚本(适合自定义需求)
如果需要更精细的控制,也可以用T-SQL脚本单独导出表结构和关系:
导出表结构(含约束、默认值)
运行以下脚本(替换YourDatabaseName为你的数据库名),会生成所有表的CREATE语句:
USE YourDatabaseName; GO SELECT 'CREATE TABLE ' + QUOTENAME(t.name) + '(' + CHAR(13) + CHAR(10) + STUFF(( SELECT ', ' + CHAR(13) + CHAR(10) + ' ' + QUOTENAME(c.name) + ' ' + TYPE_NAME(c.system_type_id) + CASE WHEN c.is_nullable = 0 THEN ' NOT NULL' ELSE '' END + CASE WHEN dc.default_object_id IS NOT NULL THEN ' DEFAULT ' + OBJECT_DEFINITION(dc.default_object_id) ELSE '' END FROM sys.columns c LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id WHERE c.object_id = t.object_id ORDER BY c.column_id FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + CHAR(13) + CHAR(10) + ')' FROM sys.tables t ORDER BY t.name;
导出外键关系
运行以下脚本生成外键的ALTER TABLE语句:
USE YourDatabaseName; GO SELECT 'ALTER TABLE ' + QUOTENAME(OBJECT_NAME(f.parent_object_id)) + ' ADD CONSTRAINT ' + QUOTENAME(f.name) + ' FOREIGN KEY (' + STUFF(( SELECT ', ' + QUOTENAME(c.name) FROM sys.columns c WHERE c.object_id = f.parent_object_id AND c.column_id IN (SELECT column_id FROM sys.foreign_key_columns WHERE constraint_object_id = f.object_id) FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') REFERENCES ' + QUOTENAME(OBJECT_NAME(f.referenced_object_id)) + '(' + STUFF(( SELECT ', ' + QUOTENAME(c.name) FROM sys.columns c WHERE c.object_id = f.referenced_object_id AND c.column_id IN (SELECT referenced_column_id FROM sys.foreign_key_columns WHERE constraint_object_id = f.object_id) FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ');' FROM sys.foreign_keys f ORDER BY OBJECT_NAME(f.parent_object_id);
把这两个脚本的结果复制出来,保存为.sql文件,在新PC上运行即可。不过这种方法需要单独处理数据库关系图,还是方法1更省心。
注意事项
- 确保新PC上的SQL Server版本不低于2008(更高版本完全兼容2008的结构)
- 运行脚本时,登录账号需要有创建数据库、表、约束的权限
- 如果新数据库里看不到关系图,右键「数据库关系图」→「新建数据库关系图」,按提示创建关系图支持对象,之后关系图就会正常显示
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

