如何在TSQL中将JSON值赋值给变量?存储过程开发求助
解决从JSON提取值并插入表的存储过程问题
嘿,我懂你现在的纠结——想把JSON里的Id直接插入表头表,还要用JSON里的UserName查到对应的UserID一起插入,但卡在了怎么把JSON值赋值给变量这一步对吧?别慌,我给你一步步拆解解决方案:
第一步:把JSON值提取到变量里
SQL Server里有俩好用的工具处理JSON:JSON_VALUE(专门提单个标量值)和OPENJSON(适合解析复杂JSON成行集)。你的场景用JSON_VALUE就足够简单直接了。
先给你演示怎么声明并赋值变量:
-- 注意:原JSON里的"是HTML转义的双引号,要换成普通双引号才能被SQL正确解析 DECLARE @Json NVARCHAR(MAX) = '{"Id":1, "SerialNumber":425, "Model":"T8X", "UserName":"BRASKYB"}'; DECLARE @Id INT; DECLARE @UserName NVARCHAR(50); DECLARE @UserID INT; -- 用来存查到的用户ID -- 从JSON里把Id和UserName提取到变量 SET @Id = JSON_VALUE(@Json, '$.Id'); SET @UserName = JSON_VALUE(@Json, '$.UserName');
第二步:整合逻辑到存储过程里
接下来把查询UserID、插入表头表的逻辑打包成存储过程,完整脚本如下:
CREATE PROCEDURE CreatePartHeaderRow @Json NVARCHAR(MAX) AS BEGIN SET NOCOUNT ON; DECLARE @Id INT; DECLARE @UserName NVARCHAR(50); DECLARE @UserID INT; -- 先处理JSON里的转义引号(如果你的输入JSON带"的话) SET @Json = REPLACE(@Json, '"', '"'); -- 提取JSON中的核心值到变量 SET @Id = JSON_VALUE(@Json, '$.Id'); SET @UserName = JSON_VALUE(@Json, '$.UserName'); -- 根据UserName查询对应的UserID(假设用户表叫Users,字段是UserName和UserID) SELECT @UserID = UserID FROM Users WHERE UserName = @UserName; -- 可选:做个校验,避免插入无效的UserID IF @UserID IS NOT NULL BEGIN -- 插入表头行表(假设表头表叫PartHeaderRows,字段是Id和UserID) INSERT INTO PartHeaderRows (Id, UserID) VALUES (@Id, @UserID); END ELSE BEGIN -- 找不到用户时可以抛出错误或者记录日志,根据你的业务需求调整 RAISERROR('未找到用户名对应的用户:%s', 16, 1, @UserName); END END
额外小提示
- 如果你的JSON结构更复杂,比如嵌套了对象/数组,用
OPENJSON会更灵活,比如:
-- 用OPENJSON解析成临时表提取值 SELECT Id, UserName INTO #TempJsonData FROM OPENJSON(@Json) WITH ( Id INT '$.Id', UserName NVARCHAR(50) '$.UserName' ); SET @Id = (SELECT Id FROM #TempJsonData); SET @UserName = (SELECT UserName FROM #TempJsonData);
- 记得把脚本里的表名、字段名换成你实际库中的名称哦!
内容的提问来源于stack exchange,提问作者Idata10
相关产品推荐
相关产品推荐

