Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 将数据从开发人员复制到QA的存储过程_Sql_Stored Procedures - Fatal编程技术网

Sql 将数据从开发人员复制到QA的存储过程

Sql 将数据从开发人员复制到QA的存储过程,sql,stored-procedures,Sql,Stored Procedures,我在Dev中设置了一些规则,并且运行良好。现在,我想把同样的规则复制到QA。涉及4个表,表结构在dev和QA中是相同的。我只想将数据从开发人员移动到QA 如果有任何损坏,我想完全恢复 我有 产品表 产品组表(产品表中的产品标识FK) 产品子组表(来自产品组表的组Id FK) 属性表(来自产品子组表的子组\u Id FK) 编写存储过程来实现这一点的有效方法是什么 我在下面试过,因为交叉连接,它复制了记录 DECLARE @TempProducts TABLE (ProductId INT);

我在Dev中设置了一些规则,并且运行良好。现在,我想把同样的规则复制到QA。涉及4个表,表结构在dev和QA中是相同的。我只想将数据从开发人员移动到QA

如果有任何损坏,我想完全恢复

我有

  • 产品表
  • 产品组表(产品表中的产品标识FK)
  • 产品子组表(来自产品组表的组Id FK)
  • 属性表(来自产品子组表的子组\u Id FK)
  • 编写存储过程来实现这一点的有效方法是什么

    我在下面试过,因为交叉连接,它复制了记录

    DECLARE @TempProducts  TABLE (ProductId INT);
    INSERT INTO Products  (Product_NAME, Product_DESCRIPTION, UPDATED_DATE, CREATED_DATE, CREATED_BY, UPDATED_BY)
    OUTPUT INSERTED.product_ID INTO @TempProducts  
    SELECT Product_NAME, Product_DESCRIPTION, getDate(), getDate(), UPDATED_BY, CREATED_BY,  FROM [dbo].[Products] P
    JOIN Product_GROUP PG ON P.Product_ID = PG.Product_Id
    CROSS JOIN @TempProducts  WHERE PG.Product_ID = 2
    

    假设dev和qa位于不同的服务器上,您需要首先创建一个链接服务器

    为了确保它在失败时恢复,我将在存储过程中调用一个事务,如果它失败,您可以回滚到事务启动前的状态(这是事务的一个特性)。我想象的存储过程只是一个从一台服务器到另一台服务器的insert语句,假设两台服务器中都存在相同的表。如果您需要这个存储过程一天运行多次,您可以在一个表上设置一个触发器,在添加新的或类似的内容时触发存储过程


    根据pk/fk的制作方式,您可能需要将它们从插入中排除。

    您需要一个数据库部署包,主要是一个sql文件。它应该包含所有表/视图DDL、种子数据、函数、存储过程、触发器等


    您的规则集应该变成一堆insert语句(如果不存在,则插入;如果存在,则更新,取决于您的业务需求)。

    我只有表,没有视图、触发器等。我不担心更新,我只想插入“…创建人,来源…”这不会编译。更正查询并指定开发和质量保证设置。您使用的是哪种数据库管理系统?(该代码是特定于产品的。)