为何SQL Server无法为指定表生成全部关系脚本?
SQL Server生成表脚本时未包含主键表关系的解决办法
问题原因
SQL Server默认生成的表创建脚本,只会包含当前表自身的结构和约束:比如列定义、主键约束,以及当前表作为外键表时引用其他表的外键约束。而那些以当前表(TableA)为主键表、由其他子表定义的外键关系,属于子表的对象,不会被自动包含在TableA的脚本里。
解决方法
方法1:通过Generate Scripts向导生成完整依赖脚本
- 右键目标数据库,选择Tasks > Generate Scripts
- 在向导中选择TableA,进入Set Scripting Options步骤
- 点击Advanced按钮,在高级选项中修改两项设置:
- 将
Script Foreign Keys设为True - 将
Script Dependent Objects设为True
- 将
- 完成后续步骤生成脚本,此时会包含TableA的结构,以及所有引用它的子表和对应的外键约束
方法2:手动编写外键约束脚本
如果只需要特定子表的外键关系,可手动编写ALTER TABLE语句添加约束,示例如下:
-- 假设子表TableB通过TableA_ID字段引用TableA的主键ID ALTER TABLE [dbo].[TableB] ADD CONSTRAINT [FK_TableB_TableA] FOREIGN KEY ([TableA_ID]) REFERENCES [dbo].[TableA] ([ID]) ON DELETE NO ACTION -- 根据业务需求修改删除/更新规则 ON UPDATE NO ACTION;
注意:执行这类脚本前,要确保TableA和对应的子表都已创建完成。
内容的提问来源于stack exchange,提问作者Chicagoan
相关产品推荐
相关产品推荐

