json - 如何从返回 JSON 的 Web 服务中提供视图?
问题描述
开发人员创建了一个 Web 服务,它返回带有员工数据的 JSON,我需要用他的数据提供或填充视图。
新的业务需求要求我们阻止直接的 DB 到 DB 连接,所以我将不得不在没有链接服务器的情况下做 :(
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[EMP]
AS
BEGIN
set nocount on
SET FMTONLY OFF
DECLARE @status int
DECLARE @responseText as table(responseText varchar(max))
DECLARE @res as Int;
DECLARE @url as nvarchar(1000) = 'http://websrvtst2:8086/ENFER_API/api/DatosEmpleado'
EXEC sp_OACreate 'MSXML2.ServerXMLHTTP.3.0', @res OUT
EXEC sp_OAMethod @res, 'open', NULL, 'GET',@url,'false'
EXEC sp_OAMethod @res, 'send'
EXEC sp_OAGetProperty @res, 'status', @status OUT
INSERT INTO @ResponseText (ResponseText) EXEC sp_OAGetProperty @res, 'responseText'
EXEC sp_OADestroy @res
DECLARE @json AS NVARCHAR(MAX)
SELECT @json = responseText FROM @responseText
SELECT * FROM
OPENJSON(@json)--, N'$.elements')
WITH (
[planta] nvarchar(max) N'$.planta' ,
[codempleado] nvarchar(max) N'$.codempleado',
[Sexo] nvarchar(max) N'$.Sexo',
[FechaNac] nvarchar(max) N'$.FechaNac',
[FullName] nvarchar(max) N'$.FullName',
[Plaza] nvarchar(max) N'$.Plaza',
[Identidad] nvarchar(max) N'$.Identidad',
[ISSS] nvarchar(max) N'$.ISSS',
[Razon_Social] nvarchar(max) N'$.Razon_Social',
[Departamento] nvarchar(max) N'$.Departamento',
[Jornada] nvarchar(max) N'$.Jornada',
[Unidad] nvarchar(max) N'$.Unidad',
[Celda] nvarchar(max) N'$.Celda',
[Operacion] nvarchar(max) N'$.Operacion',
[Make] nvarchar(max) N'$.Make'
)
RETURN 0
END
执行时:EXEC [TEST].[DBO].EMP 它以网格形式返回数据
我希望能够选择一个视图并获得该网格作为回报。
解决方案
在 SQL Server 2017 中,您可以将 SSIS 包发布为 SQL 视图。
在这种情况下,当您对视图执行查询时,SQL 引擎将启动一个 SSIS 包。
您必须使用特殊的 SSIS 目的地:“数据流目的地”将数据推送到视图。您可以在演练中找到更多详细信息:将 SSIS 包发布为 SQL 视图
在这个解决方案中,您需要创建一个连接到 SSIS 实例的链接服务器,但它不会是直接的 DB 到 DB 连接,您将使用 Web 服务来获取数据,因此它将满足您的要求。在链接服务器中,您将使用新的 OLEDB 提供程序“SSISOLEDB”。
要从 Web 服务获取数据,您可以使用自定义 C#/VB 代码或使用一些预定义任务,例如Web 服务任务,然后反序列化 JSON。
推荐阅读
- javascript - 如何从普通 JavaScript 访问 AMD 模块(“定义”)?
- python - 使用python在列表中查找毕达哥拉斯三元组的数量?
- javascript - 如何从 angularjs 中的 openshift 控制台访问 config_maps
- javascript - 使用 JQuery - 点击事件
- vbscript - ASP Classic 解析来自 curl POST -F 的数据
- android - 从蓝牙设备接收数据到安卓应用
- python - Python selenium webdriver什么也没得到,但浏览器通常会显示网页
- java - onPostExecute 被调用两次并显示双重结果
- swift - 滚动回上一个collectionview单元格
- sanity - 您可以在 Sanity 中创建一个文档文件夹吗?如何创建?