首页 > 解决方案 > 如何在远程 Azure SQL Server 的视图中创建数据所在的视图

问题描述

我正在尝试创建驻留在远程 Azure SQL Server 中的数据视图。我似乎无法在视图中创建一个表或临时表来存储 sp_exeucte_remote 调用的结果,因为这是不允许的,所以我尝试使用一个函数,但随后我收到一个错误,抱怨以下错误基于提供函数定义。

Invalid use of a side-effecting operator 'INSERT EXEC' within a function

CREATE OR ALTER FUNCTION [dbo].[fn_Test]()
RETURNS @Results TABLE
(
    [ID] INT,
    [$ShardName] VARCHAR(500)
)
AS
BEGIN
    INSERT INTO @Results
    EXEC sp_execute_remote N'MyExternalDatasource', N'SELECT 1' 
    RETURN;
END

如何创建存在于远程 Azure SQL Server 上的数据视图,该数据也作为视图存在?仅供参考 - 我尝试创建视图的服务器也是 Azure SQL Server。

标签: azure-sql-databaseexternal-data-source

解决方案


你为什么使用函数?

根据Microsoft 文档,您不能在函数中调用存储过程。

此外,您的远程执行仅返回 1 列,并且您尚未定义要插入的目标列。

远程对象是 VIEW 的事实并不重要。如果我们假设远程数据库上的 VIEW 也有名为 ID 和 [$shardname] 的列,那么为什么不直接使用类似的东西:

CREATE TABLE #results ([ID] int, [$shardname] varchar(500))
INSERT #results ([ID], [$shardname])
EXEC sp_execute_remote N'ExternalSource', N'SELECT [ID], [$shardname] FROM RemoteTableName'

推荐阅读