INSERT INTO从两个不同的服务器数据库(INSERT INTO from two diffe

2019-08-05 13:46发布

我想的数据复制testdabse.invoicebasecampdev.invoice表。 testdabse是本地数据库,而basecampdev是在服务器中。

我对将数据复制到另一个表不起作用查询时,它说

Invalid object name 'basecampdev.dbo.invoice'.  

我一直在阅读这个文件 ,但发现很难跟踪和理解。

这些都是从服务器提供的信息

Server type: Database Engine
Server name: server.database.windows.net (this is not the real name)
Authentication: SQL Server Authentication
Login: myusername
Password: mypassword  

我怎样才能连接到服务器,这样我就可以运行此查询

INSERT INTO [basecampdev].[dbo].[invoice]
           ([InvoiceNumber]
           ,[TotalAmount]
           ,[IsActive]
           ,[CreatedBy]
           ,[UpdatedBy]
           ,[CreatedDate]
           ,[UpdatedDate]
           ,[Remarks])
SELECT [InvoiceNumber]
           ,[TotalAmount]
           ,[IsActive]
           ,[CreatedBy]
           ,[UpdatedBy]
           ,[CreatedDate]
           ,[UpdatedDate]
           ,[Remarks] FROM [testdabse].[dbo].[invoice]

屏幕快照

Answer 1:

这听起来像你可能需要创建和SQL Server查询链接的数据库服务器

此刻的你已经创建了一个使用一个3部分组成的名称不同的数据库之间去查询mydatabase.dbo.mytable但你需要去一个级别,并使用一个4部分组成的名称myserver.mydatabase.dbo.mytable ,看到这个帖子上四个部分命名的更多信息

编辑
这四个部分命名为您现有的查询将以下(我怀疑你可能已经试过?)被如图所示,但是这是假定你可以“得到”与四个部分名称的远程数据库,您可能需要编辑您的主机文件/注册服务器或者以其他方式确定在哪里可以找到database.windows.net

INSERT INTO [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]
       ([InvoiceNumber]
       ,[TotalAmount]
       ,[IsActive]
       ,[CreatedBy]
       ,[UpdatedBy]
       ,[CreatedDate]
       ,[UpdatedDate]
       ,[Remarks])
SELECT [InvoiceNumber]
       ,[TotalAmount]
       ,[IsActive]
       ,[CreatedBy]
       ,[UpdatedBy]
       ,[CreatedDate]
       ,[UpdatedDate]
       ,[Remarks] FROM [BC1-PC].[testdabse].[dbo].[invoice]

如果您无法访问远程服务器,然后看看你可以创建一个链接数据库服务器 :

EXEC sp_addlinkedserver [database.windows.net];
GO
USE tempdb;
GO
CREATE SYNONYM MyInvoice FOR 
    [database.windows.net].basecampdev.dbo.invoice;
GO

然后,你可以查询反对MyEmployee无需完整的四个部分名称



Answer 2:

由西蒙给出的答案工作正常,我,但你必须这样做,以正确的顺序:首先,你必须在要插入数据是[DATABASE.WINDOWS.NET]服务器[basecampdev]在您的案件。

你可以试试,看看你可以选择一些数据出来的发票表,以确保您可以访问。

Select top 10 * from [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]

其次,实行以链接到不同的服务器由西蒙给出的查询。 这次使用其他服务器:

EXEC sp_addlinkedserver [BC1-PC]; -- this will create a link tempdb that you can access from where you are
GO
USE tempdb;
GO
CREATE SYNONYM MyInvoice FOR 
    [BC1-PC].testdabse.dbo.invoice; -- Make a copy of the table and data that you can use
GO

现在只是做你的INSERT语句。

INSERT INTO [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]
       ([InvoiceNumber]
       ,[TotalAmount]
       ,[IsActive]
       ,[CreatedBy]
       ,[UpdatedBy]
       ,[CreatedDate]
       ,[UpdatedDate]
       ,[Remarks])
SELECT [InvoiceNumber]
       ,[TotalAmount]
       ,[IsActive]
       ,[CreatedBy]
       ,[UpdatedBy]
       ,[CreatedDate]
       ,[UpdatedDate]
       ,[Remarks] FROM MyInvoice

希望这可以帮助!



Answer 3:

你不能直接从一个不同的数据库中的表复制到目标服务器数据库,如果源数据库是不是在你的链接服务器。 只有一种解释可能是,产生所需的表的脚本,(架构与数据)到一个临时表在源服务器数据库,然后执行该脚本在目标服务器数据库创建表与您的数据。 最后使用INSERT INTO [DESTINATION_TABLE] SELECT * FROM [TEMPORARY_SOURCE_TABLE。 获取数据到目标表后删除临时之一。

我发现这个解决方案时,我遇到了同样的情况。 希望这可以帮助你。



Answer 4:

USE [mydb1]

SELECT *
INTO mytable1
FROM OPENDATASOURCE (
        'SQLNCLI'
        ,'Data Source=XXX.XX.XX.XXX;Initial Catalog=mydb2;User ID=XXX;Password=XXXX'
        ).[mydb2].dbo.mytable2
    /*  steps - 
            1-  [mydb1] means our opend connection database 
            2-  mytable1 means create copy table in mydb1 database where we want insert record
            3-  XXX.XX.XX.XXX - another server name.
            4-  mydb2 another server database.
            5-  write User id and Password of another server credential
            6-  mytable2 is another server table where u fetch record from it. */


Answer 5:

您可以使用CREATE SYNONYM远程对象。



文章来源: INSERT INTO from two different server database