sql - 将 "SELECT INTO"与 Azure SQL 结合使用从另一个数据库复制数据

标签 sql azure azure-sql-database

我正在尝试自动初始化 Azure 上的 SQL 数据库。对于某些(查找)表,每次初始化时都需要将数据从源数据库复制到新数据库中。

为此,我执行一个包含以下内容的查询

SELECT * INTO [target_db_name]..[my_table_name] FROM [source_db_name].dbo.[my_table_name]

此时抛出一个异常,告诉我

Reference to database and/or server name in 'source_db_name.dbo.my_table_name' is not supported in this version of SQL Server.

经过研究,我发现现在可以引用另一个 Azure SQL DB,只要它已配置为外部数据源。 [herehere ]

因此,在我的目标数据库中,我执行了以下语句:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL cred  
WITH IDENTITY = '<username>',
SECRET = '<password>';

CREATE EXTERNAL DATA SOURCE [source_db_name]
WITH
(
    TYPE=RDBMS,
    LOCATION='my_location.database.windows.net',
    DATABASE_NAME='source_db_name',
    CREDENTIAL= cred
);

CREATE EXTERNAL TABLE [dbo].[my_table_name](
    [my_column_name] BIGINT NOT NULL
)
WITH
(
    DATA_SOURCE = [source_db_name],
    SCHEMA_NAME = 'dbo',
    OBJECT_NAME = 'my_table_name'
)

但是 SELECT INTO 语句仍然会产生相同的异常。

此外,一个简单的 SELECT * FROM [source_db_name].[my_table_name] 会产生异常“无效的对象名称 'source_db_name.my_table_name'”。

我错过了什么?

更新
我发现了问题:CREATE EXTERNAL TABLE 在目标数据库中创建看似的表。要查询此信息,不应使用源数据库名称。所以我失败的地方是:

SELECT * FROM [source_db_name].[my_table_name]

我发现我确实应该查询

SELECT * FROM [my_table_name]

最佳答案

看起来您可能需要定义外部表 according to what appears to be the correct syntax :

CREATE EXTERNAL TABLE [dbo].[source_table](
...
)
WITH
(
DATA_SOURCE = source_db_name
);

The three part name approach is unsupported, except through elastic database query.

现在,由于您正在创建外部表,因此查询可以假设外部表是我们的 [target_db] 的 native 对象 - 这允许您编写查询SELECT * FROM [my_table_name],正如您从编辑中发现的那样。从文档中,值得注意的是“这允许对远程数据库进行只读查询”。因此,该表对象不可写,但您的问题仅提到从中读取以填充新表。

关于sql - 将 "SELECT INTO"与 Azure SQL 结合使用从另一个数据库复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209534/

相关文章:

sql-server - 连接到本地 SQL 的 Azure SQL DB

azure - 将 SQL 数据库及其数据上传到 Azure

php - MySQL时间/日期计算

java - "No such column name"错误

azure - 是否有内置方法可以将集合复制到同一区域中的 "follower"集合?

c# - 无法解析 Fabric :/addresses using ServicePartitionResolver. 问题:根据验证过程,远程证书无效

sql-server - 将数据库部署到 Windows Azure 时出现 Uniqueidentifier 错误

Php脚本运行正常,但没有在数据库中创建表

php - 将 mit inventor2 链接到 sql 数据库错误 1109

sql - 无法从辅助角色连接到 SQL Azure 主服务器