Azure SQL - 使用弹性数据库查询

时间:2016-08-01 08:38:37

标签: sql-server database tsql azure azure-sql-database

我正在使用Azure SQL。

我尝试跨数据库查询(在同一服务器中),但后来我收到此错误:

  

在'Database.x.dbo.tableName'中引用数据库和/或服务器名称   此版本的SQL Server不支持。

然后我发现现在可以使用Elastic db query进行此操作,如this article中所述:

  

“弹性数据库查询现在支持在Azure中跨数据库查询   SQL数据库。“

我按照上面文章中的步骤进行了操作:

  1. 创建主键
  2. 创建数据库SCOPED CREDENTIAL
  3. 创建外部     数据来源
  4. 创建外部表
  5. 我的问题是关于第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 ) 
    

2 个答案:

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

请注意,您不必创建所有表字段,只需创建所需的表字段。