我有一张表 - Lead.Metadata
- 其中有一个名为meta
JSON 类型的列和一个生成的列:
cycle VARCHAR(255) AS (JSON_UNQUOTE(meta->"$.cycle"))
问题是当我这样做时UPDATE Lead.Metadata SET cycle = 'MONTHLY'
出现此错误:
错误代码:3105。表“元数据”中生成的列“cycle”指定的值是不允许的。
我不明白。循环是一个VARCHAR(255)
并且'MONTHLY'
应该适合那里。
有什么想法吗?
(此外,请注意,代码库是遗留代码库;数据库结构不是最优的,但修复这个问题是一个更大的项目)
您的列
cycle
是生成列,无法直接更新。生成列的值是根据列定义中包含的表达式计算得出的。
简而言之:生成列是
expression
。更新主列,然后该列自动重新计算。
小提琴
这与适配无关。问题在于这
MONTHLY
不是 JSON 引用的字符串。您必须使用'"MONTHLY"'
在列中嵌入文字引号。您不希望该列是 JSON 吗?