我正在使用Azure SQL。
我尝试跨数据库查询(在同一服务器中),但后来我收到此错误:
在'Database.x.dbo.tableName'中引用数据库和/或服务器名称 此版本的SQL Server不支持。
然后我发现现在可以使用Elastic db query
进行此操作,如this article中所述:
“弹性数据库查询现在支持在Azure中跨数据库查询 SQL数据库。“
我按照上面文章中的步骤进行了操作:
我的问题是关于第4步。
我不明白我应该如何从databaseB.dbo.externalTable
中选择数据。
我应该从原始表的 create 语句中获取该列吗?
当我尝试这样做然后从中选择时,我收到一个错误:
从一个或多个分片中检索数据时出错。潜在的错误 收到的消息是:'发生了一个或多个错误。'。
应用它的最简单,最实际的方法是什么?
这是我的sql代码:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<usename>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
(TYPE = RDBMS,
LOCATION = 'ServerName.database.windows.net',
DATABASE_NAME = 'DatabaseName',
CREDENTIAL = ElasticDBQueryCred,
) ;
CREATE EXTERNAL TABLE ['<schemaName>'].['<tableName>']
( [Name] [varchar](255) NOT NULL,
[id] [int] NOT NULL
)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc )
答案 0 :(得分:1)
您需要按照此处描述的步骤操作:https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-query-vertical-partitioning/。您的代码中似乎缺少的部分是外部表的创建。请注意,您不能在Azure SQL DB中使用三部分或四部分名称。您需要创建一个外部表,然后您可以像本地表一样引用外部表来获取远程数据。
希望这有帮助。
谢谢, 托斯滕
答案 1 :(得分:1)
我需要为外部表编写自定义名称,并添加模式名称和表名,如下所示:
CREATE EXTERNAL TABLE <customTableName>
( [Name] [varchar](255) NOT NULL,
[id] [int] NOT NULL
)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc
SCHEMA_NAME = N'<schemaName>',
OBJECT_NAME = N'<tableName>')
)
然后您只需从此表中获取数据:
SELECT * FROM customTableName
请注意,您不必创建所有表字段,只需创建所需的表字段。