2012-06-14 74 views
1

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

这里的1个表的一个例子:

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

我一共8代表与2个的附加列。并且他们中的大多数通过fk与彼此相关,所以我想使用向导来确定哪个表首先被插入。问题是,它只适用于“从一个或多个表中复制数据”而不是“写入指定数据的查询”(我用它来填充这两个新列)。

我一直在做数据复制,因为我使用MVC代码第一次为我申请这个非常缓慢的过程,我没有对服务器的访问,以便能够下降,在我的闲暇创建表。所以我不得不求助于这个来维护我已有的数据。

+0

两个新字段是否允许空值?如果是,那么您可以尝试嵌套插入查询。像这样:INSERT INTO dbase2.dbo.Appointment VALUES(SELECT * FROM dbase1.dbo.Appointment)。这种类型的查询确实对我有用了好几次。希望它也能帮助你。 –

+0

8不是很多。你可不看8列表并自行确定他们需要处理的订单吗? –

+1

@ V.P.Verma您在评论中发布的查询将无法使用。 –

回答

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约束以正确的顺序生成它们反正)

+0

让我快速尝试一下。所以我应该直接写下查询,而不是向导。这将是我第一次做这样的事情,所以忍受我和我的noob问题。 :) – gdubs

0

写出每个你想要的顺序插入过程的SQL查询。这将是最简单的方法。

0

设置Default values对于这两列

像AuditAt - 默认日期即GetDate() 对于AuditBy - 人物ID /名称

现在,你可以插入进入这些表格,而不用输入这两列

+0

只是好奇,谁说'auditby'列上有一个外键? –

+0

先生,我认为,审计是一个用户名,它应该是一个与用户表的关系。 – Pankaj

+0

那应该是什么,不一定是它是什么。我其实只是问我是否在这个问题上漏掉了一些东西;我不认为这是你告诉OP的地方,他需要在该桌上使用外键。例如,他是否应该将每个可能的Windows身份验证登录存储在表中? –