如何在远程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。

解决方法

为什么要使用功能?

根据Microsoft Documentation,您不能在函数内调用存储过程。

此外,您的远程执行仅返回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'