从源数据库迁移到目标数据库SQL Server 2012

时间:2015-08-26 05:09:19

标签: sql-server database

我在SQL Server 2012中有两个表。

  • tblSource保留在SourceDB数据库中,
  • tblTarget保留在TargetDB数据库中。

上述两个表都保留在同一台服务器上。

所以我想用这个查询将数据从源表传输到目标表:

INSERT INTO TargetDB.dbo.tblTarget(ProductID, ProductName, CategoryName)
	SELECT 
        p.ProductID, p.ProductName, c.CategoryName
	FROM 
        dbo.tblProduct p
	LEFT JOIN 
        dbo.tblCategory c ON p.ProductID = c.ProductID

这里,

  • 我不想写TargetDB.dbo.tblTarget
  • 而是我想在插入数据到其他数据库表{{}期间编写以下方式1}}

但它不起作用。

  • 错误显示

      

    无效的对象名称'dbo.tblTarget'

  • 我该怎么做?将数据传输到目标数据库,而不使用来自源db的前缀db name。

    这是必需的,因为我必须在3个服务器中执行此操作,其中数据库名称不相同。 这可能吗?

    1 个答案:

    答案 0 :(得分:0)

    我怀疑是否可以不提及database名称;

    当您说dbo.tblTarget时,将在数据库中搜索session pointed to对象。
    如果你想查看其他数据库,那么你也必须提到数据库名称。 TargetDB.dbo.tblTarget

    您可以使用dynamic sqlprocedure;

    create procedure insert_data(
        @TargetDB as nvarchar(250) 
    )
    as
    begin
        DECLARE @SQLString nvarchar(500);
        SET @SQLString = N'INSERT INTO '  +  @TargetDB +'.dbo.tblTarget(ProductID, ProductName, CategoryName)
        SELECT 
            p.ProductID, p.ProductName, c.CategoryName
        FROM  dbo.tblProduct p
        LEFT JOIN dbo.tblCategory c ON p.ProductID = c.ProductID'
        EXECUTE sp_executesql @SQLString
    end;
    go
    

    procedure中创建sourceDB。 然后使用targetDB作为in参数执行该过程。

    exec   insert_data('targetDB1')
    exec   insert_data('targetDB2')
    exec   insert_data('targetDB3')....