我正在尝试将testdabse.invoice
表的数据复制到basecampdev.invoice
表。
testdabse
是本地数据库,而basecampdev
在服务器中。
我将查询数据复制到另一个表是不行的,它说
Invalid object name 'basecampdev.dbo.invoice'.
我一直在阅读documentation,但发现很难理解和理解。
这些是服务器提供的信息
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]
屏幕截图
答案 0 :(得分:16)
听起来你可能需要create and query linked database servers in SQL Server
目前,您使用3部分名称mydatabase.dbo.mytable
创建了在不同数据库之间进行的查询,但您需要升级并使用4部分名称myserver.mydatabase.dbo.mytable
,请参阅{{ 3}}了解更多信息
修改强>
现有查询的四部分命名如下所示(我怀疑您可能已经尝试了?),但这假设您可以使用四部分名称“到达”远程数据库,您可能需要编辑主机文件/注册服务器或以其他方式识别查找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]
如果您无法访问远程服务器,请查看是否可以创建this post on four part naming:
EXEC sp_addlinkedserver [database.windows.net];
GO
USE tempdb;
GO
CREATE SYNONYM MyInvoice FOR
[database.windows.net].basecampdev.dbo.invoice;
GO
然后,您只需查询MyEmployee
,而无需完整的四部分名称
答案 1 :(得分:3)
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
希望这有帮助!
答案 2 :(得分:2)
如果源数据库不在链接服务器中,则无法直接从其他数据库将表复制到目标服务器数据库。 但有一种方法是,可以在源服务器数据库中临时生成所需表的脚本(带有数据的模式)到一个表中,然后在目标服务器数据库中执行脚本以创建包含数据的表。最后使用INSERT INTO [DESTINATION_TABLE]从[TEMPORARY_SOURCE_TABLE]中选择*。 将数据导入目标表后删除临时数据。
当我遇到同样的情况时,我找到了这个解决方案。希望这对你也有帮助。
答案 3 :(得分:1)
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. */
答案 4 :(得分:0)
您可以将CREATE SYNONYM用于远程对象。