插入时的标识符无效

invalid identifier on insert

create table query_results.temporary_20200422(
  a_string varchar,
  a_hash varchar default sha2(a_string,512)
)

成功。然而,

insert into query_results.temporary_20200422(a_string) values('1')

产量

SQL compilation error: error line 1 at position 5 invalid identifier 'TEMPORARY_20200422.A_STRING'

怎么回事?

我的意思是,使用现有列的函数作为另一列的 default 值完全有可能不起作用——事实上,这就是我正在测试的——但我不相信这是问题是因为错误在第 1 行,位置 5.

正如您已经确认的那样,无法引用 "any columns of the table"。

请检查:

https://support.snowflake.net/s/question/0D50Z00009T2MHSSA3/persistent-virtual-column-using-default-on-an-existing-table

为什么显示错误在第1行第5位置?我认为这与您的默认表达式有关:

sha2(a_string,512)

a_string 的位置在第 1 行,位置 5(因为我们从 0 开始计数)。如果你像这样创建 table,你会看到错误在第 1 行,位置 12:

create or replace table temporary_20200422(
  a_string varchar,
  upstr varchar default lower(upper(a_string))
)
;

insert into temporary_20200422 (a_string) values('1');

SQL 编译错误:错误行 1 在位置 12 无效标识符 'TEMPORARY_20200422.A_STRING'