从不同数据库中的表复制数据

时间:2014-05-26 14:48:14

标签: sql

我有两个数据库:带有table1的DataB1和带有Table2的DataB2

Table1 has : field1, field2, filed3
Table2 has : fielda, fieldb, fieldc

不同的字段名称,但数据类型相同。

问题:如何执行打开数据库并从table1复制到table2的存储过程?

4 个答案:

答案 0 :(得分:2)

您可以使用插入执行此操作。在大多数数据库中,它看起来像:

insert into datab1.table1(field1, field2, field3)
    select fielda, fieldb, fieldc
    from datab2.table2;

如果还涉及模式名称,则某些数据库可能具有三部分命名约定。

编辑:

使用三部分命名约定,可能类似于:

insert into datab1.dbo.table1(field1, field2, field3)
    select fielda, fieldb, fieldc
    from datab2.dbo.table2;

答案 1 :(得分:0)

您没有指定数据库服务器,但大多数都有INSERT ... SELECT

INSERT INTO
    DataB2.Table2 (fielda,fieldb,fieldc)
SELECT field1,field2,field3
FROM DataB1.Table1

如果您只是想轻松查看其他数据库中的数据,那么更好的选择可能是VIEW

CREATE VIEW
    DataB2.View2
AS SELECT
    field1 AS fielda,
    field2 AS fieldb,
    field3 AS fieldc
FROM DataB1.Table1

答案 2 :(得分:0)

这不是一个存储过程,但它早得多。在SSMS中,右键单击源数据库节点,选择任务 - >出口数据。有关详细信息,请访问msdn.microsoft.com/en-us/library/ms140052.aspx

答案 3 :(得分:0)

每个数据库都有自己的方法来完成它。 例如,在Firebird 2.5中,你可以做同样的事情:

execute block
returns(ID_N Integer, ID_R Integer)
as
begin
  For
    select ID from TABLE into :ID_N
  Do
  Begin
    ID_R=0;
    execute statement 'select ID from TABLE where ID='||:ID_N
      on external data source 'Path_to_remote_database'
      as user current_user password 'user_password'
      into :ID_R;
    if (:ID_R>0) then
      suspend;
  End
end;

此代码显示两个表中的匹配ID。因此,使用“外部数据源上的执行语句”,您可以完成所需的一切。