【问题标题】:Command to distinguish a table from a view区分表和视图的命令
【发布时间】:2017-10-16 06:46:17
【问题描述】:

是否有命令来确定给定关系是table 还是view

我使用的试错法是这样做的:

SHOW CREATE VIEW table_name

如果是table,而不是view,我的数据库软件(DBeaver 中的 Presto)会给我一个错误:

关系table_nametable,而不是view

我认为此错误来自内部运行的类似命令以检查我的查询。如果是view,则该命令当然有效。

【问题讨论】:

  • 如果您使用的是SHOW CREATE ..,那么您正在针对特定的数据库引擎 - 即非标准 SQL
  • 查询元数据的标准方法是Information Schemayour 数据库系统是否实现它我不能说。另外,请注意,您不应该尽可能区分表和视图。您应该能够用视图替换表(反之亦然)并且不会使现有代码无效。

标签: sql presto dbeaver


【解决方案1】:

以下将显示有关所有可用表的信息表,包括views 和tables:

SELECT * FROM information_schema.tables

更多详情请见Information Schema

【讨论】:

  • 请注意,如果您的数据存储很大,查询information_schema 可能会很慢,因此您最好指定where table_schema = '{schema}' 甚至where table_name = '{table}'
【解决方案2】:

在 SQL Server 中,您可以使用 Sys.Objects 中的“类型”列来区分表或视图。如果 Type 列中的值为“V”,则其为视图,否则如果 Type 列中的值为“U”,则其为表

要检查它是否是一个表,请使用下面的查询

SELECT DISTINCT NAME, O.TYPE FROM SYS.OBJECTS O WHERE O.NAME LIKE 'Prefix%' AND O.TYPE='U'

要检查它是否是视图,请使用以下查询

SELECT DISTINCT NAME, O.TYPE FROM SYS.OBJECTS O WHERE O.NAME LIKE 'Prefix%' AND O.TYPE='V'

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2019-05-11
    • 2012-07-01
    • 2021-11-03
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    相关资源
    最近更新 更多