创建一个 JSON 对象作为参数发送到存储过程
Create a JSON object to be sent as parameter to Stored Procedure
我有一个存储过程 sp_proc_1
,它接受一些参数,例如 @val1
、@val2
和 @val3
。我想使用值 @val1
和 @val2
创建一个 JSON 对象,这样我就可以将该 JSON 对象作为参数之一传递给第二个存储过程 sp_proc2
我将从 sp_proc1
调用它。请指导。
我认为的方法是将 @val1
和 @val2
插入 temp_table
然后 select 它们从 temp_table
插入 JSON 对象。我的想法对吗?
该语句取决于预期的 JSON 输出格式,但可能的选项是 FOR JSON PATH
:
CREATE PROCEDURE Proc_1
@val1 int,
@val2 varchar(100),
@val3 datetime
AS
BEGIN
DECLARE @json nvarchar(max)
SET @json = (SELECT @val1 AS val1, @val2 AS val2 FOR JSON PATH)
EXEC Proc_2 @json
END
生成的JSON为:
[{"val1":1,"val2":"Test value"}]
一种解决方案是使用FOR JSON
;您只需要构建适当的 select 语句:
declare @val1 int = 1234;
declare @val2 varchar(100) = 'foobar';
declare @val3 datetime2(3) = sysdatetime();
declare @json nvarchar(max) = (
select *
from (values (@val1, @val2, @val3)) as v(val1, val2, val3)
for json auto, without_array_wrapper
);
select @json;
我有一个存储过程 sp_proc_1
,它接受一些参数,例如 @val1
、@val2
和 @val3
。我想使用值 @val1
和 @val2
创建一个 JSON 对象,这样我就可以将该 JSON 对象作为参数之一传递给第二个存储过程 sp_proc2
我将从 sp_proc1
调用它。请指导。
我认为的方法是将 @val1
和 @val2
插入 temp_table
然后 select 它们从 temp_table
插入 JSON 对象。我的想法对吗?
该语句取决于预期的 JSON 输出格式,但可能的选项是 FOR JSON PATH
:
CREATE PROCEDURE Proc_1
@val1 int,
@val2 varchar(100),
@val3 datetime
AS
BEGIN
DECLARE @json nvarchar(max)
SET @json = (SELECT @val1 AS val1, @val2 AS val2 FOR JSON PATH)
EXEC Proc_2 @json
END
生成的JSON为:
[{"val1":1,"val2":"Test value"}]
一种解决方案是使用FOR JSON
;您只需要构建适当的 select 语句:
declare @val1 int = 1234;
declare @val2 varchar(100) = 'foobar';
declare @val3 datetime2(3) = sysdatetime();
declare @json nvarchar(max) = (
select *
from (values (@val1, @val2, @val3)) as v(val1, val2, val3)
for json auto, without_array_wrapper
);
select @json;