首页 > 解决方案 > 如何从视图列中获取 SQLite 列类型

问题描述

定义这样的视图时:

CREATE TABLE x (a VARCHAR(10));
CREATE VIEW v AS SELECT a, a || ' ' AS b FROM x;

我现在想使用以下方法发现视图列的列类型:

PRAGMA table_info('v');

不幸的是,这导致

cid |name |type        |notnull |dflt_value |pk |
----|-----|------------|--------|-----------|---|
0   |a    |VARCHAR(10) |0       |           |0  |
1   |b    |            |0       |           |0  |

任何类型的列表达式都不存在列类型。是否有不同的方法来定义视图和/或查询表信息以获得列类型,或者这正是 SQLite 的类型关联的工作原理?

标签: sqlsqlite

解决方案


我试过这个

CREATE VIEW v2 AS SELECT a, CAST((a || ' ') AS VARCHAR(11)) AS b FROM x;

也没有成功。

文档中没有记录答案。你在这里引用 https://www.sqlite.org/datatype3.html

  • 3.2 表达式的亲和性:“……否则,表达式没有亲和性。”
  • 3.3 视图和子查询的列关联:...“表达式总是没有关联”。

事实上,您的问题可能是关于表/视图信息中的内容,而不是关于类型关联(也不是类型约束)。在我看来,这是 SQLite3 中的一个纯粹实现决定,即除了 CREATE VIEW 中的预定义属性之外,不为任何其他内容设置视图信息。


推荐阅读