1

所以我试图将一些数据从数据库表复制到另一个。但问题是,目标数据库表有 2 个新列是必需的。我想在 SQL Server Management Studio 上使用导出/导入向导,但如果我使用它,我需要为每个表编写一个查询,并且一次只能执行 1 个查询。想知道是否有更有效的方法。

这是 1 个表的示例:

dbase1.dbo.Appointment { id, name, description, createdate }
dbase2.dbo.Appointment { id, name, description, createdate, auditby, auditat}

我总共有 8 个表,其中有 2 个附加列。并且它们中的大多数通过 fk 相互关联,所以我想使用向导来确定首先插入哪个表。问题在于,它仅在我执行“从一个或多个表中复制数据”而不是“编写查询以指定数据”时才有效(我使用它来填充这两个新列)。

我在复制数据时一直在执行这个非常缓慢的过程,因为我在我的应用程序中使用 MVC Code First,并且我无法访问服务器以便能够在闲暇时删除和创建表。所以我不得不求助于这个来维护我已经拥有的数据。

4

3 回答 3

1

一个想法:暂时禁用目标数据库中的外键约束。然后,您运行插入的顺序无关紧要。为了填充两个新的和必需的列,您只需要选择一些股票值放入其中(因为显然这些行最初不受初始审计的影响)。例如:

INSERT dbase2.dbo.appointment
(id, name, description, createdate, auditby, auditat)
  SELECT id, name, description, createdate, 
    auditby = 'me', auditat = GETDATE()
  FROM dbo.appointment;

由于挑战似乎仅仅是目标需要不在源中的列,并且您需要确定应该在这些审计列中填充什么,这似乎可以同时解决多个问题。你只需要弄清楚要放什么而不是'me'and GETDATE()

(要让向导为您提取这 8 个表,您可能可以创建一个类似于上述查询的选择部分的视图,但这需要更多的工作,并且它不会看到在无论如何都是正确的顺序。)

于 2012-06-14T03:27:48.447 回答
0

Default values为这两列设置

喜欢 AuditAt - 默认日期,即GetDate() AuditBy - 人员 ID/姓名

现在,您可以在不输入这两列的情况下插入这些表

于 2012-06-14T03:30:57.973 回答
0

按照您想要的顺序为每个插入进程编写 sql 查询。那将是最简单的方法。

于 2012-06-14T03:19:34.217 回答