Snowflake cloud data platform 雪花中的动态列名

Snowflake cloud data platform 雪花中的动态列名,snowflake-cloud-data-platform,identifier,Snowflake Cloud Data Platform,Identifier,我对雪花还不熟悉,所以请容忍我。 我正在尝试做一件非常简单的事情——按文字指定列名,但得到sql编译错误 插入MYDB.MYSCHEMA.MYTABLE(标识符('MYCOLUMN'))值(10) SQL编译器指向MYCOLUMN前面的意外括号。跳过单词标识符和单个qotes就可以了 create table mytable(MYCOLUMN number); insert into MYTABLE (MYCOLUMN) values (10); 对我来说很好 现在,如果您希望列的大小写都很

我对雪花还不熟悉,所以请容忍我。 我正在尝试做一件非常简单的事情——按文字指定列名,但得到sql编译错误
插入MYDB.MYSCHEMA.MYTABLE(标识符('MYCOLUMN'))值(10)

SQL编译器指向MYCOLUMN前面的意外括号。跳过单词标识符和单个qotes就可以了

create table mytable(MYCOLUMN number);
insert into MYTABLE (MYCOLUMN) values (10); 
对我来说很好

现在,如果您希望列的大小写都很奇特,而不是不区分大小写和自动大写,那么可以将名称用双引号括起来
“AwSoMeName WITH spaces”
是有效的,但也很痛苦

create table MY_TABLE_2("AwSoMeTable WITH spaces" number);
insert into MY_TABLE_2 ("AwSoMeTable WITH spaces") values (10); 
对我来说很好

现在,如果您希望列的大小写都很奇特,而不是不区分大小写和自动大写,那么可以将名称用双引号括起来
“AwSoMeName WITH spaces”
是有效的,但也很痛苦

create table MY_TABLE_2("AwSoMeTable WITH spaces" number);
insert into MY_TABLE_2 ("AwSoMeTable WITH spaces") values (10); 

刚刚得到雪花支持的回应。目前,仅select语句支持“标识符”。它不适用于用于标识列的插入。它确实可以识别select和insert中的表。

刚刚从Snowflake支持部门得到响应。目前,仅select语句支持“标识符”。它不适用于用于标识列的插入。它确实可以识别select和insert表。

谢谢,但这不是我要问的。列名应该在变量中(为了简单起见,这里是文本),因此它必须在标识符调用中。最后,此代码用于在设计时不知道列名称的存储过程。标识符dos for me代表表名,但不代表列,因为它代表存储过程,所以只需使用反勾号来终止SQL语句即可。然后可以使用
${myVariable}
语法替换SQL中的任何内容。编写SQL语句是不安全的做法,不应使用。可以很容易地传入类似“myFakecolumn;drop database”的列名。这就是为什么要使用identifier关键字。(但在我的情况下,它不适用于仅针对表名的列)作为一个总括性语句,如果您在从信息架构中选择的列之间循环,那么表/列的循环是错误的,如果在存储的过程中编写sql的安全性为231%。但是,用户输入应该始终通过正确的处理功能来避免问题。但是,考虑到这个问题对您正在做的事情的上下文/范围几乎没有说明,它确实应该被否决/关闭,但雪花云数据平台标签上没有这种情况。“编写sql语句是不安全的做法,永远不应该被使用。”谢谢,但这不是我要问的。列名应该在变量中(为了简单起见,这里是文本),因此它必须在标识符调用中。最后,此代码用于在设计时不知道列名称的存储过程。标识符dos for me代表表名,但不代表列,因为它代表存储过程,所以只需使用反勾号来终止SQL语句即可。然后可以使用
${myVariable}
语法替换SQL中的任何内容。编写SQL语句是不安全的做法,不应使用。可以很容易地传入类似“myFakecolumn;drop database”的列名。这就是为什么要使用identifier关键字。(但在我的情况下,它不适用于仅针对表名的列)作为一个总括性语句,如果您在从信息架构中选择的列之间循环,那么表/列的循环是错误的,如果在存储的过程中编写sql的安全性为231%。但是,用户输入应该始终通过正确的处理功能来避免问题。但是,考虑到这个问题很少涉及您所做工作的上下文/范围,它确实应该被否决/关闭,但雪花云数据平台标签上不会出现这种情况。“编写sql语句是不安全的做法,永远不应该使用。”因此,如果您要使用存储过程来构建动态sql,只需通过存储过程注入列名。如果您的最终目标不是“掌握使用会话变量”,那么“掌握使用会话变量”是没有意义的。因此,如果您要使用存储过程来构建动态SQL,只需通过存储过程注入列名即可。如果您的最终目标不是“掌握使用会话变量”,那么“掌握使用会话变量”就毫无意义。