我有一个数据库,其中有两个表,其中一个包含有关访问网站的用户的一些信息,另一个包含第一个表的外键以及有关其请求的一堆JSON数据。
双跳存在问题,即它记录发出请求的服务帐户而不是用户名;由于此UserName
记录在另一个表的ModelData
列中,因此我想更正这些服务帐户。
这是我尝试过的:
UPDATE Table_A
SET Table_A.CreatedBy = JSON_VALUE(Table_B.ModelData,'$.Action.UserName')
FROM Table_A
INNER JOIN Table_B ON (Table_B.Table_AID = Table_A.ID)
WHERE CreatedBy LIKE '%svc.%'
我认为它会做什么:
CreatedBy
列当前等于“ svc”帐户的地方,ModelData
,UserName
,并且CreatedBy
。它的实际作用是抛出此错误:
JSON文本格式不正确。意外字符“。”位于位置0
答案 0 :(得分:2)
LukStorms在我的假设中指出了问题;如果该字段为空或,则找不到用户名,脚本将失败。经过几次检查后已解决此问题。
UPDATE Table_A
SET Table_A.CreatedBy = IIF(IsJson(Table_B.ModelData) > 0,
IsNull(JSON_VALUE(Table_B.ModelData,'$.Action.UserName'), Table_A.CreatedBy),
Table_A.CreatedBy)
FROM Table_A
INNER JOIN Table_B ON (Table_B.Table_AID = Table_A.ID)
WHERE CreatedBy LIKE '%svc.%'
首先,我们需要确保ModelData
的内容实际上是一个JSON字符串,而不是普通文本或空白,然后我们还需要确保$.Action.UserName
的实际JSON值是不为空。完成此操作后,我们就可以安全地写入值了。