从两个不同的服务器数据库中插入数据到表中

31

我试图将testdabse.invoice表的数据复制到basecampdev.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]

截屏

输入图像描述


SQL Server导入和导出向导。http://www.mssqltips.com/sqlservertutorial/202/simple-way-to-export-data-from-sql-server/ - Justin
7个回答

28

看起来你可能需要在SQL Server中创建和查询链接数据库服务器

目前,你已经创建了一个查询,该查询使用三部分名称在不同的数据库之间进行切换mydatabase.dbo.mytable,但是你需要上升到一个级别并使用四部分名称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进行查询,而不需要完整的四部分名称。


谢谢您提供的示例,我已经尝试了一下,但是出现了这个错误:OLE DB提供程序“SQL Server”未注册。有什么想法吗? - fiberOptics

6

Simon提供的答案对我很有效,但您必须按照正确的顺序操作:

首先,您必须进入要插入数据的服务器,这在您的情况下是[DATABASE.WINDOWS.NET] . [basecampdev]。

您可以尝试从发票表中选择一些数据以确保您有访问权限。

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

其次,按照Simon提供的查询语句连接到另一台服务器。这次使用另一台服务器:

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 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

希望这可以帮到你!

4
如果源数据库不在您的链接服务器中,则无法直接将表复制到目标服务器数据库中。但有一个可行的方法,即在源服务器DB中临时生成所需表的脚本(包括架构和数据),然后在目标服务器DB中执行该脚本以创建一个包含数据的表。最后使用INSERT INTO [DESTINATION_TABLE] select * from [TEMPORARY_SOURCE_TABLE]将数据插入到目标表中。在将数据导入目标表后,请删除临时表。
当我面对相同的情况时,我找到了这个解决方案。希望这也能帮助到您。

1
请用示例解释如何做到这一点? - Akshay

3
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. */

0

对我有用...这里的ip将是远程SQL服务器实例

insert into YourDatabaseName.dbo.TableName  select * from [192.168.9.230,1434].[SourceDatabaseName].[dbo].[SourceTableName]

0
如果您使用的是Visual Studio 2019或更高版本,您可以通过使用SQL数据比较工具轻松完成此操作。
在Visual Studio中,转到工具 > SQL Server > 新建数据比较。
您可以从不同的服务器选择源和目标。选择您想要更新的数据差异类型。接下来,您可以选择要更新的表。

enter image description here


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接