创建含自定义列名的SQL视图时提示Safety_Icon上下文无效如何解决
报错原因及解决方法
常见报错原因
- 原表
CHICAGO_PUBLIC_SCHOOLS的对应列名实际包含空格而非下划线:芝加哥公立学校公开数据集的默认列名多为空格分隔的格式,你代码中写的Safety_Icon对应原列实际为Safety Icon,其余Family_Involvement_Icon对应Family Involvement Icon以此类推,数据库无法匹配到下划线命名的列,因此抛出无效错误。 - 数据库开启了标识符大小写敏感规则:若原表创建时用引号包裹定义了大小写混合的列名,未加引号的
Safety_Icon会被数据库自动转为全大写/全小写,无法匹配原列名的大小写格式,也会触发该报错。
解决步骤
- 先执行查询确认原表的准确列名,不同数据库的查询语法如下:
- MySQL/MariaDB:
DESC CHICAGO_PUBLIC_SCHOOLS; - Oracle/DB2/PostgreSQL:
DESCRIBE CHICAGO_PUBLIC_SCHOOLS; - SQL Server:
EXEC sp_help 'CHICAGO_PUBLIC_SCHOOLS';
- MySQL/MariaDB:
- 按照查到的准确列名修改SELECT子句,若列名带空格或大小写敏感,用对应数据库的标识符包裹符号包裹原列名:
- MySQL/MariaDB用反引号,Oracle/DB2/PostgreSQL用双引号,SQL Server用方括号。
- 以下为列名带空格场景下的修正代码示例(以MySQL为例):
CREATE VIEW School_Rating (School_Name, Safety_Rating, Family_Rating, Environment_Rating, Instruction_Rating, Leaders_Rating, Teachers_Rating) AS SELECT NAME_OF_SCHOOL, `Safety Icon`, `Family Involvement Icon`, `Environment Icon`, `Instruction Icon`, `Leaders Icon`, `Teachers Icon` FROM CHICAGO_PUBLIC_SCHOOLS;
内容的提问来源于stack exchange,提问作者warth69
相关产品推荐
相关产品推荐

