Azure SQL Server INSERT跨库操作报40515错误咨询
错误根因
你使用的是Azure SQL Database单数据库部署模式,该版本原生不支持通过[数据库名].[架构名].[表名]的三部分命名格式做跨库数据操作,你代码里写的deletadosYY.dbo.deletadosCadastroTeste属于跨库引用,因此触发40515错误。
跨库数据交换可行方案
根据使用场景,可以选择以下任意一种方案实现需求:
- 配置弹性跨库查询
这是最适配你现有单次插入需求的方案,不需要迁移服务层级,只需要在当前执行插入的数据库中配置外部数据源和外部表映射,即可实现跨库写入:- 若当前库没有创建过数据库主密钥,先执行以下命令创建,替换为自己的强密码即可:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '你的自定义强密码';- 创建用于访问目标库
deletadosYY的数据库范围凭据,凭据对应用户需要拥有目标表的写入权限:
CREATE DATABASE SCOPED CREDENTIAL CrossDBCred WITH IDENTITY = '有目标库写入权限的SQL用户名', SECRET = '对应用户的密码';- 创建指向目标库的外部数据源:
CREATE EXTERNAL DATA SOURCE DB_deletadosYY WITH ( TYPE = RDBMS, LOCATION = '你的Azure SQL逻辑服务器完整地址', DATABASE_NAME = 'deletadosYY', CREDENTIAL = CrossDBCred );- 创建和目标表
deletadosCadastroTeste字段结构、类型完全一致的外部表:
配置完成后,直接对外部表执行插入即可完成跨库写入,不需要写跨库三段名:CREATE EXTERNAL TABLE ext_deletadosCadastroTeste ( -- 按你实际表结构填写,示例对应你给出的插入数据 Id INT, UserName VARCHAR(50), [Address] VARCHAR(200), Age INT, BirthDate DATE ) WITH ( DATA_SOURCE = DB_deletadosYY, SCHEMA_NAME = 'dbo', OBJECT_NAME = 'deletadosCadastroTeste' );INSERT INTO ext_deletadosCadastroTeste VALUES (19,'Michael', 'Street Los Angelos', 25, '1998-12-25') - 弹性作业同步
如果是需要定期、批量做跨库数据交换,可以配置Azure SQL弹性作业,在作业步骤中配置跨库数据读写逻辑,适合常态化的数据同步场景。 - 中转导出导入
如果是一次性的小批量数据迁移,可以先将需要写入的数据导出为CSV或BACPAC格式,再直接导入到目标库deletadosYY的对应表中,不需要做额外配置。 - 迁移到Azure SQL托管实例
Azure SQL托管实例完整兼容本地SQL Server的跨库、跨服务器查询语法,你原来写的三段式跨库引用代码不需要任何修改就能直接运行,如果后续有大量跨库操作需求可以选择该部署模式。
内容的提问来源于stack exchange,提问作者ysilva74
相关产品推荐
相关产品推荐

