获取表是不是存在的布尔结果
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 包:如何获取“表是不是存在?”的逻辑值查询类型?