我正在尝试使用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结果?
无法修改存储过程,您最后的努力将是使用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