我有一个存储过程用于JSON中的一些选择。
CREATE PROC [pr_MySP]
-- params
WITH ENCRYPTION
AS
BEGIN
SELECT
...
FOR JSON PATH;
END
现在我想在另一个中使用这个存储过程。
CREATE PROC [pr_MySP_1]
-- params
WITH ENCRYPTION
AS
BEGIN
DECLARE @result_sp NVARCHAR(MAX);
EXEC @result_sp = [pr_MySP];
SELECT @result_sp;
END
但是当我尝试SELECT @result_sp;
时,它会返回0。
我究竟做错了什么?
答案 0 :(得分:2)
我不知道你在第一个SP中做了什么,但在一个可内联的UDF中可能会更好地解决这个问题:
CREATE FUNCTION dbo.CreateJSON()
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN (SELECT TOP 10 * FROM sys.objects FOR JSON AUTO);
END
GO
- 您可以在任何上下文中使用UDF。您可以定义参数来控制行为
DECLARE @TheJson NVARCHAR(MAX);
SET @TheJson=dbo.CreateJSON();
SELECT @TheJson;
GO
- 清理
DROP FUNCTION dbo.CreateJSON;
在大多数情况下,内嵌TVF 的性能更佳!但是你必须加入其结果集,这不是那么直观......
答案 1 :(得分:0)
您可以将其存储在table variable
中。
DECLARE @result_sp (results NVARCHAR(MAX))
INSERT INTO @result_sp
EXEC [pr_MySP]
SELECT TOP 1 results FROM @result_sp
如果您仍希望将其存储在正常变量中,
DECLARE @final NVARCHAR(MAX)
DECLARE @result_sp (results NVARCHAR(MAX))
INSERT INTO @result_sp
EXEC [pr_MySP]
SELECT TOP 1 @final = results FROM @result_sp
SELECT @final