Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server中将一个数据库复制到另一个数据库?_Sql Server - Fatal编程技术网

Sql server 当目标数据库中已经存在表和约束时,如何在sql server中将一个数据库复制到另一个数据库?

Sql server 当目标数据库中已经存在表和约束时,如何在sql server中将一个数据库复制到另一个数据库?,sql-server,Sql Server,我在不同的环境中创建了相同的数据库:Dev和QA。在进行开发时,我更改了Dev数据库中的一些表。如何更改QA数据库,使其在表(和约束)方面再次与开发人员数据库相同 我查看了以下链接: [ 上面链接中的步骤没有直接起作用,因为表和约束已经存在于第二个数据库中 我遵循以下步骤: 右键单击要复制的数据库 选择“任务”>“生成脚本” “选择特定数据库对象”并选中“表” 单击下一步。再次单击下一步 这会将.sql文件导出到显示的路径,同时执行上述步骤 我编辑了脚本文件,并将数据库名称更改为QA数据库名称(

我在不同的环境中创建了相同的数据库:Dev和QA。在进行开发时,我更改了Dev数据库中的一些表。如何更改QA数据库,使其在表(和约束)方面再次与开发人员数据库相同

我查看了以下链接:

[

上面链接中的步骤没有直接起作用,因为表和约束已经存在于第二个数据库中

我遵循以下步骤:

  • 右键单击要复制的数据库
  • 选择“任务”>“生成脚本”
  • “选择特定数据库对象”并选中“表”
  • 单击下一步。再次单击下一步
  • 这会将.sql文件导出到显示的路径,同时执行上述步骤

  • 我编辑了脚本文件,并将数据库名称更改为QA数据库名称(位于脚本顶部)

  • 在此之后,在每个CREATETABLE语句上方添加以下行作为表的存在

    如果存在tablename,则删除TABLE

  • 运行查询时,我收到一条错误消息

    无法删除对象tablename,因为它被外部引用 关键约束

    如何更改第二个数据库,使其在表(和约束)方面与第一个数据库相同


    谢谢

    嗯,最直接的解决方案是首先删除所有约束。您可以在
    删除表
    行上方为每个约束添加一个
    删除约束
    ,尽管这可能会很繁琐

    的答案有一个脚本,该脚本删除数据库和表中的所有约束。可以在where中省略表名param


    但是,由于您正在销毁数据库中的所有内容,因此删除和重新创建数据库可能是最容易的。这样,您就不需要将
    drop table
    语句添加到来自开发人员的create脚本中。

    在您的脚本中,将创建表与插入记录分开,供以后使用

    示例(之前):

    示例(后面)

    如果存在外部约束,请检查目标表(主表或主表)是否比源表(辅助表或从属表)先创建和填充

    示例(之前):

    示例(后面):


    最后,如果您使用自动生成的键,请在插入表之前关闭,在插入表之后再打开,因为DB服务器可能会将新键分配给目标表,而源表可能会期望以前的键。

    那么您只是想复制数据,而不是对象吗?如果存在,请添加
    删除表TS
    ,在前面没有帮助,因为脚本将创建的第一个表是“底部”的表关系树的;需要创建第一个表,但删除最后一个表。您还可以禁用目标数据库中的所有约束检查,并在复制后重新启用,请参阅:@JonathanLarouche。这是否意味着要执行以下步骤?1)暂时禁用所有约束2)编辑脚本并删除创建的行重新启用约束(因为约束已经在禁用模式下存在)3)运行脚本4)再次启用约束。@SauravR,是的,应该可以工作,但如果最后数据完整性无效,则可能无法重新启用约束
    create table one ...
    insert into table one ...
    create table two ...
    insert into table two ..
    create table three ...
    insert into table three ..
    
    create table one ...
    create table two ...
    create table three ...
    
    insert into table one ...
    insert into table two ..
    insert into table three ..
    
    create table one 
      (int onekey primary key, int threekey foreing key)
    create table three ...
     (int threekey primary key)
    
    insert into table one ...
    insert into table three ..
    
    create table three ...
       (int threekey primary key)
    create table one 
       (int onekey primary key, int threekey foreing key)
    
    insert into table three ..
    insert into table one ...