我在同一个same服务器上有2DB,在两个DB上都有相同的表( TB1 ),现在我想从TB1 of DB2读取数据并将数据插入到TB1 of DB1中。我正在使用下面的查询,但得到错误。
insert into TB1 select 1,* from [DB2].dbo.TB1错误消息
Msg 40515,15级,状态1,16号线 此版本的Server不支持引用“DB2.dbo.TB1”中的数据库和/或服务器名称。
发布于 2017-08-18 06:08:56
是的,您可以在Features上使用弹性查询功能,这是执行跨数据库查询的唯一方法。
以下是详细的查询:
在DB1中运行以下查询(因为您说过从DB2读取TB1并将这些数据插入到DB1中的TB2中)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'STro*ngPaSSe0rD';
CREATE DATABASE SCOPED CREDENTIAL Login
WITH IDENTITY = 'Login',
SECRET = 'STro*ngPaSSe0rD';
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='DB2',
CREDENTIAL= Login
);
CREATE EXTERNAL TABLE [dbo].[TB1]
(
[Columns] [DataTypes]
)
WITH (DATA_SOURCE = [RemoteReferenceData])在这些步骤之后,您可以像普通表一样查询外部表。尽管在使用外部表时存在一些限制,例如无法将数据插入外部表(引用表)
发布于 2018-04-30 16:03:31
Azure支持这种跨数据库查询功能自2015年以来,但需要一些额外设置来工作和弹性查询。
第一步是创建安全凭据:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL DB2Security
WITH IDENTITY = '<username>',
SECRET = '<password>';“用户名”和“密码”应该是登录到DB2数据库的用户名和密码。
现在您可以使用它来定义外部数据源,这样DB1就可以连接到DB2:
CREATE EXTERNAL DATA SOURCE DB2Access
WITH (
TYPE=RDBMS,
LOCATION='myservernotyours.database.secure.windows.net',
DATABASE_NAME='DB2',
CREDENTIAL= DB2Security);最后,使用前面的外部数据源,将TB1映射为来自DB2数据库的外部表:
CREATE EXTERNAL TABLE dbo.TB1FromDB2(
ID int,
Val varchar(50))
WITH
(
DATA_SOURCE = DB2Access);您也可以使用Azure SQL数据同步完成这一任务,但是数据被复制到一个数据库中,而且这个特性仍然是预览版本(5/2018),并且总是看到最古老的数据(每次同步的最小可配置间隔为5分钟)。
发布于 2017-08-16 14:35:27
https://stackoverflow.com/questions/45715668
复制相似问题