azure-sql-database - 如何在远程 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 文档,您不能在函数中调用存储过程。
此外,您的远程执行仅返回 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'
推荐阅读
- c++ - 在线程之间传输函数调用
- javascript - 如何从 Angular 中的 SQLite 数据库中检索数据?
- awk - 当字段为文本时,AWK 无法进行数字比较
- python-3.x - 从 NSE 下载 csv 文件
- android - 我在将数据传递到一个片段到另一个片段时收到空对象引用错误
- c - 如何在c中旋转字符串?
- javascript - 如何使用 setTimeout 并能够获取 css 类或 id?
- css - 如果我只使用 Boostrap 的在线 CDN 源文件,为什么所有字体(即字形图标)都能正确加载?
- javafx - JavaFX:尝试在主 fxml 中将元素从另一个加载的 fxml 访问到主 fxml 时出现空指针异常
- python - 使用 xarray 计算给定年份的月份平均值