本地Microsoft SQL Server环境连接Azure Dataverse环境:Linked Server可行性及连接属性咨询
用SQL Server Linked Server连接Dataverse实现数据下载的方案
当然可以!用SQL Server的Linked Server完全能实现把Dataverse数据同步到本地SQL Server的需求,我帮你梳理清楚可行性、具体配置步骤,还有一些关键注意事项。
可行性确认
先给你吃个定心丸:这个方案是官方支持的。Dataverse提供了专门的OLE DB驱动,SQL Server的Linked Server可以通过这个驱动建立跨环境的链接,之后你就能像查询本地SQL表一样访问Dataverse的实体数据,直接把数据导入到本地库中。
具体配置步骤
1. 先装必备驱动
首先要在本地SQL Server所在的服务器上安装Microsoft Dynamics 365 OLE DB Provider——这是连接Dataverse的专用驱动,确保下载的版本和你的Dataverse环境兼容(对应Power Platform的当前版本即可)。
2. 图形界面配置Linked Server(SSMS操作)
打开SQL Server Management Studio,跟着步骤来:
- 展开左侧的
Server Objects > Linked Servers,右键选New Linked Server - General选项卡:
- Linked server:给链接起个好记的名字,比如
DATAVERSE_LINK - Server type:选
Other data source - Provider:下拉找到
Microsoft Dynamics 365 OLE DB Provider(装了驱动才会出现) - Product name:填
Dataverse或者Dynamics 365都行 - Data source:填你的Dataverse环境URL,格式是
https://<你的环境名>.crm.dynamics.com - Provider string:如果用账号密码登录,可以填
Authentication=OAuth;Username=<你的邮箱账号>;Password=<你的密码>,不过更推荐后面在Security选项卡配置
- Linked server:给链接起个好记的名字,比如
- Security选项卡:
- 选
Be made using this security context,然后填入有权限访问Dataverse的账号(比如你的Azure AD邮箱)和对应密码 - 要是本地SQL Server的运行账号已经有Dataverse访问权限,也可以选
Be made using the login's current security context,不用存密码更安全
- 选
- Server Options选项卡:
- 把
RPC和RPC Out都设为True(方便执行远程操作) Data Access设为True,其他默认就行
- 把
3. T-SQL脚本配置(适合自动化/批量部署)
如果习惯用脚本,直接跑下面的代码就行,记得替换掉占位符:
-- 创建Linked Server EXEC sp_addlinkedserver @server = N'DATAVERSE_LINK', @srvproduct=N'Dataverse', @provider=N'MSDYN365OLEDB', @datasrc=N'https://<你的环境名>.crm.dynamics.com'; -- 配置登录映射 EXEC sp_addlinkedsrvlogin @rmtsrvname=N'DATAVERSE_LINK', @useself=N'False', @locallogin=NULL, @rmtuser=N'你的账号邮箱@xxx.com', @rmtpassword=N'你的Dataverse密码'; -- 开启必要的服务器选项 EXEC sp_serveroption @server=N'DATAVERSE_LINK', @optname=N'rpc', @optvalue=N'true'; EXEC sp_serveroption @server=N'DATAVERSE_LINK', @optname=N'rpc out', @optvalue=N'true'; EXEC sp_serveroption @server=N'DATAVERSE_LINK', @optname=N'data access', @optvalue=N'true';
4. 测试连接&下载数据
- 测试:右键刚创建的Linked Server,选
Test Connection,成功的话就没问题了 - 下载数据:用
OPENQUERY或者直接查询链接服务器的实体(Dataverse的实体在Linked Server里以视图形式存在,逻辑名比如account对应“客户”实体)
举个例子,把Dataverse的客户表数据导入本地的Local_Account_Backup表:
-- 首次全量导入(自动创建本地表) SELECT * INTO Local_Account_Backup FROM OPENQUERY(DATAVERSE_LINK, 'SELECT accountid, name, address1_city, modifiedon FROM account'); -- 增量更新(只拉取最近修改的数据) INSERT INTO Local_Account_Backup (accountid, name, address1_city, modifiedon) SELECT accountid, name, address1_city, modifiedon FROM OPENQUERY(DATAVERSE_LINK, 'SELECT accountid, name, address1_city, modifiedon FROM account WHERE modifiedon > ''2024-05-01''');
关键注意事项
- 权限问题:用来连接的Dataverse账号必须有对应实体的读取权限,比如给账号分配System Reader角色,或者针对特定实体设置Read权限
- 驱动兼容性:一定要装对应版本的OLE DB驱动,不然可能出现连接失败的问题,去微软官网下载最新版就行
- 身份验证优化:除了账号密码,还支持Azure AD集成身份验证,如果本地服务器是域环境,用Windows身份验证更安全,不用在Linked Server里存明文密码
- 性能优化:如果数据量很大,记得用分页查询(Dataverse支持
TOP或者FetchXML分页),避免一次性拉取太多数据拖慢系统 - 实体逻辑名:Dataverse的实体在Linked Server里用的是逻辑名,不是显示名,比如“联系人”对应
contact,可以在Power Apps Maker门户或者Advanced Find里查看实体的逻辑名称
内容的提问来源于stack exchange,提问作者Nige
相关产品推荐
相关产品推荐

