复制表数据并填充新列

时间:2012-06-14 03:12:26

标签: sql-server sql-server-2008 tsql ssms

所以我试图将一些数据从数据库表复制到另一个。但问题是,目标数据库表有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而我无法访问服务器以便能够在闲暇时放下并创建表格。所以我不得不求助于维护我已有的数据。

3 个答案:

答案 0 :(得分:1)

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

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

由于挑战似乎仅仅是目标需要不在源中的列,并且您需要确定应在这些审计列中填充的内容,这似乎可以立即解决多个问题。您只需要确定要放在哪里而不是'me'GETDATE()

(要让向导为您提取这8个表,您可能能够创建类似于上述查询的选择部分的视图,但这样做更多,并且它不会看到生成的基础FK约束无论如何,它们的顺序正确。)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为这两列设置Default values

与AuditAt类似 - 默认日期,即GetDate() 对于AuditBy - 人员ID /名称

现在,您可以插入这些表而无需输入这两列