获取表是不是存在的布尔结果

Posted

技术标签:

【中文标题】获取表是不是存在的布尔结果【英文标题】:Get boolean result whether table exists or not获取表是否存在的布尔结果 【发布时间】:2014-02-15 14:42:31 【问题描述】:

我不想提交 SQL 请求。我只想知道数据库中是否存在特定的表,类似于下面的伪语句:

IF EXISTS TABLE mytablename RETURN TRUE ELSE FALSE

我该怎么做?我找到了几个关于如何修改不存在的表的示例。

【问题讨论】:

你用的是什么数据库? @GordonLinoff 这是 mysql 我已经删除了我的答案,因为我认为您的意思是 SQL Server。 @PAX 。 . . MySQL 支持information_schema 表。 【参考方案1】:

这在很大程度上取决于数据库,但这适用于许多:

if exists (select 1 from information_schema.tables where table_name = 'mytablename')

(您可能希望为数据库/模式名称添加其他条件。)

虽然有几个数据库支持information_schema,但其他数据库可能会使用all_tabs (Oracle) 或其他一些表/视图。

而且,如果您想要返回此值的查询,请使用:

select max(case when table_name = 'mytablename' then 1 else 0 end) as TableExists
from information_schema.tables;

【讨论】:

我收到以下错误消息:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists (select 1 from information_schema.tables where table_name = 'geolocati' at line 1 @PAX 。 . . MySQL 仅支持if 内部存储程序(存储过程、函数等)。见dev.mysql.com/doc/refman/5.7/en/if.html。您可以使用第二个查询返回一个值以供使用。 将包含表的数据库名称 ('dataBaseName') 添加到约束中也很重要。否则,如果 MySQL 表具有相同的名称,您将检测到它:SELECT MAX(CASE WHEN table_name = 'searchedTableName' AND table_schema = 'dataBaseName' THEN 1 ELSE 0 END) AS TableExists FROM information_schema.tables @PAX 谢谢我刚刚通过 nim-lang mysql 模块的 db.exec 函数验证了您在 mysql 5.7 中的表达式,使用 ? 参数代替直接名称。它有效。有帮助!【参考方案2】:

试试这个过程

CREATE PROCEDURE dbo.DoesTableExist (@TableName NVARCHAR(100))
AS 
BEGIN
    IF EXISTS (SELECT * FROM sys.tables WHERE Name = @TableName)
        SELECT 1
    ELSE
        SELECT 0  
END

【讨论】:

以上是关于获取表是不是存在的布尔结果的主要内容,如果未能解决你的问题,请参考以下文章

如果值存在于多个表中,则从表中获取结果

RODBC 包:如何获取“表是不是存在?”的逻辑值查询类型?

如果 gremlin 中存在边,则获取布尔值

MySQL 从表中获取数据并检查表行中是不是存在用户 ID

无法使用 spring boot 和 postgresql 获取布尔值以进行插入

如何从我的 Powershell 脚本中的 Get-ADUser 过滤器获取结果,以便验证该用户是不是存在?