在存储过程中打印 TABLE TYPE 参数

Print TABLE TYPE parameter in Stored Procedure

提问人:Bala 提问时间:11/1/2023 最后编辑:Dale KBala 更新时间:11/2/2023 访问量:33

问:

我需要将 JSON 响应从 API 传递到存储过程。因此,我创建了一个 TABLE TYPE 并尝试在此过程中使用它。但是我收到一个错误

必须声明标量变量“@mydata”。

CREATE TYPE [dbo].[apidata] AS TABLE (
    [response] [nvarchar](max) NULL
)

CREATE PROCEDURE [dbo].[usp_API] (
    @mydata dbo.apidata READONLY
)
AS
BEGIN
    PRINT @mydata
END
GO
sql-server t-sql 存储过程

评论

3赞 siggemannen 11/1/2023
不能打印表变量。但是您可以从中进行选择,例如: .顺便说一句,您也可以按原样传递 JSON 并使用 OPENJSON 将其粉碎。select * From @mydata
0赞 Bala 11/1/2023
@siggemannen Spot on!成功了。请将其作为答案发布。
0赞 Stu 11/1/2023
我想知道 OP 是否字传递 json 响应,因为 table-type 是单个 nvarchar(max) 列,如果是这样,无论如何它都应该是标量类型。

答:

1赞 siggemannen 11/1/2023 #1

不能打印表变量,只能打印标量表达式,这就是 SQL Server 告诉您找不到标量变量的原因。

但是你可以从中选择它,并像使用普通表格一样使用它:

select * From @mydata

顺便说一句,您也可以将 JSON 作为字符串传递并使用 OPENJSON 将其粉碎。