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