如何从Microsoft SQL Server的Hangfire.Job表Arguments列中提取纯外键值
提取Hangfire.Job表Arguments列中的纯外键
我明白你想从Hangfire的Job表Arguments列里提取那些作为外键的数字,之前用PARSENAME和REPLACE的思路确实不太适配这种JSON数组格式的内容,咱们换用SQL Server原生的JSON函数来处理会更准确可靠。
因为Arguments列存储的是标准的JSON数组,直接用SQL Server的JSON_VALUE函数就能精准提取数组的第一个元素(也就是你要的外键),具体SQL语句如下:
SELECT TRY_CAST(JSON_VALUE(Arguments, '$[0]') AS INT) AS ForeignKeyId FROM Hangfire.Job -- 先过滤掉非合法JSON的行,避免报错 WHERE Arguments IS NOT NULL AND ISJSON(Arguments) = 1
语句说明:
ISJSON(Arguments) = 1:先筛选出存储了合法JSON内容的行,防止后续JSON函数执行报错JSON_VALUE(Arguments, '$[0]'):直接定位到JSON数组的第一个元素(索引从0开始),提取出类似"20073"、"20075"这样的字符串TRY_CAST(...) AS INT:把提取到的字符串转换为整数类型,TRY_CAST会在转换失败时返回NULL,比普通CAST更安全,避免因格式异常导致整个查询失败
这个方法依赖SQL Server 2016及以上版本(因为这些版本开始支持JSON函数),而Hangfire本身就是用JSON格式存储Arguments的,所以用原生JSON函数处理比字符串替换的方式更稳定,不容易出现边界情况的错误。
内容的提问来源于stack exchange,提问作者user237
相关产品推荐
相关产品推荐

