首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server数据迁移失败

Server数据迁移失败
EN

Stack Overflow用户
提问于 2014-08-15 17:46:39
回答 2查看 41关注 0票数 0

所以我们把我们的SQL服务器转移到一个新的平台上。在此移动期间,主键和外键未被转移。

有没有办法将旧表中的键脚本化并将它们添加到新表中?

它看起来不像是他们要重做它,只是让我们所有的钥匙手动。任何快速/安全的方法都是值得赞赏的。

Server 2008

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 17:55:11

是的,你会喜欢这个的。我必须偶尔删除并重新添加FK (就像我想更改SQL劫持的索引以执行FK时一样),因此我编写了一个视图,该视图将给出drop并添加语句:

代码语言:javascript
复制
select *, addqry = 'ALTER TABLE '+FKtable+' WITH ' + case when is_not_trusted = 1 then 'NO' else '' end + 'CHECK'
                    + ' ADD  CONSTRAINT ['+FK+'] FOREIGN KEY ('+FKcol+') '
                    + ' REFERENCES '+PKtable+' ('+PKcol+')'+' ON UPDATE '+onUpdate+' ON DELETE '+onDelete
                    + case when is_not_for_replication = 1 then ' NOT FOR REPLICATION' else '' end + ';'
                    + case when is_disabled = 1 then '  ALTER TABLE '+FKtable+' NOCHECK CONSTRAINT ['+FK+'];' else '' end
    ,dropqry = 'ALTER TABLE '+FKtable+' DROP ['+FK+'];'
from (
    select   PKtable        = object_schema_name(f.referenced_object_id)+'.'+object_name(f.referenced_object_id)
        ,PKtbl      = object_name(f.referenced_object_id)
        ,PKcol      = pc.name
        ,FKtable        = object_schema_name(f.parent_object_id)+'.'+object_name(f.parent_object_id)
        ,FKtbl      = object_name(f.parent_object_id)
        ,colseq     = fk.constraint_column_id
        ,FKcol      = fc.name
        ,FK     = object_name(f.object_id)
        ,onUpdate   = replace(f.update_referential_action_desc collate SQL_Latin1_General_CP1_CI_AS, '_', ' ')
        ,onDelete   = replace(f.delete_referential_action_desc collate SQL_Latin1_General_CP1_CI_AS, '_', ' ')
        ,f.is_disabled
        ,f.is_not_trusted
        ,f.is_not_for_replication
    from sys.foreign_key_columns as fk
        join sys.foreign_keys f on fk.constraint_object_id = f.object_id
        join sys.columns as fc on f.parent_object_id = fc.object_id and fk.parent_column_id = fc.column_id
        join sys.columns as pc on f.referenced_object_id = pc.object_id and fk.referenced_column_id = pc.column_id
) t
票数 1
EN

Stack Overflow用户

发布于 2014-08-15 17:56:51

由于您处理的是主键和外键,所以我将使用(免费)工具,如Server数据库工具(SSDT)。这是一个与Visual集成的Microsoft工具(如果您有它--您不需要它)。它将将目标架构与源架构同步。它本质上是像Red比较这样的工具所做的,只是它是免费的。而且效果很好。使用这样的工具将确保您的整个模式被转移,而不仅仅是PKs和FKs。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25331443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档