Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server数据迁移失败_Sql_Sql Server 2008 - Fatal编程技术网

SQL Server数据迁移失败

SQL Server数据迁移失败,sql,sql-server-2008,Sql,Sql Server 2008,因此,我们将SQL server迁移到了一个新平台。在此移动过程中,主键和外键未被传输 有没有办法从旧表中编写键的脚本并将它们添加到新表中 看起来他们不会重做,而是让我们手动操作所有的钥匙。任何快速/安全的方法都值得赞赏 SQL Server 2008是的,您会喜欢它的。我必须时不时地删除并重新添加FK(例如,当我想要更改SQL为FK强制执行而劫持的索引时),因此我编写了一个视图,该视图将为我提供drop和add语句: select *, addqry = 'ALTER TABLE '+FKta

因此,我们将SQL server迁移到了一个新平台。在此移动过程中,主键和外键未被传输

有没有办法从旧表中编写键的脚本并将它们添加到新表中

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


SQL Server 2008

是的,您会喜欢它的。我必须时不时地删除并重新添加FK(例如,当我想要更改SQL为FK强制执行而劫持的索引时),因此我编写了一个视图,该视图将为我提供drop和add语句:

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

因为您处理的是主键和外键,所以我将使用(免费)工具,如SQLServer数据库工具(SSDT)。这是一个与VisualStudio集成的Microsoft工具(如果您有—您不需要它)。它将目标模式与源模式同步。除了免费之外,它基本上和RedGatSchema Compare这样的工具一样。而且效果很好。使用这样的工具将确保您的整个架构都被迁移,而不仅仅是PKs和FKs。

这是“SQL Server”到“SQL Server”的迁移吗?什么是“新平台”?它是刚刚托管在Amazon Prime上的SQL Server 2008。这会保留表中的数据吗?我运行了代码,结果是空的。我是否缺少一个必须填充的变量或任何东西?没有变量-只要您能够对迁移前数据库运行它,这应该可以工作(您是否需要“使用您的数据库”语句?)。顺便说一句,我在视图中添加了check/nocheck检查(哈哈)。