如何从存储过程中捕获JSON数据以使用tSQLt进行测试

问题描述 投票:2回答:1

我正在尝试使用tSQLt来测试返回JSON数据的存储过程。数据库在SQL Server 2016下运行。存储过程如下(大大简化):

CREATE PROCEDURE [SearchForThings]
    @SearchText NVARCHAR(1000),
    @MaximumRowsToReturn INT
AS
BEGIN
    SELECT TOP(@MaximumRowsToReturn)
        [Id],
        [ItemName]
    FROM
        [BigTableOfThings] AS bt
    WHERE 
        bt.[Tags] LIKE N'%' + @SearchText + N'%'
    ORDER BY 
        bt.[ItemName]
    FOR JSON AUTO, ROOT(N'Things');
END;

这不能以与XML相同的方式进行测试 - 我已经尝试过测试表,如下所示,这是建议in this related answer here -

CREATE TABLE #JsonResult (JsonData NVARCHAR(MAX))

INSERT #JsonResult (JsonData) 
    EXEC [SearchForThings] 'cats',10

上面的代码产生了这个错误:

INSERT语句中不允许使用FOR JSON子句。

我无法改变测试中的存储过程。如何捕获JSON结果?

json sql-server-2016 tsqlt
1个回答
1
投票

无法修改存储过程,您最后的努力将是使用OPENROWSET。以下是您在案例中的称呼方式:

INSERT INTO #JsonResult
SELECT *
FROM OPENROWSET('SQLNCLI', 'Server=[ServerNameGoesHere];Trusted_Connection=yes;','EXEC SearchForThings ''cats'',10')

如果出现错误,可以使用以下命令启用ad hoc分布式查询:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
© www.soinside.com 2019 - 2024. All rights reserved.