2013-05-12 160 views
-2

我一直想写这个简单的MySQL的语句来检查表是否存在:SQL的if语句语法错误

IF object_id('carpool'.'users', 'U') is not null THEN 
    PRINT 'Present!' 
ELSE 
    PRINT 'Not accounted for' 
END IF 

“拼车”是我的架构和“用户”是一个表 我的SQL版本是52年5月1日社区 我不断收到此错误:

Error Code: 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' at line 1 0.000 sec 

我试过几个语法如IF BEGIN END ELSE BEGIN END无济于事。 有什么想法?

+1

你是在一个简单的查询或存储过程中执行此操作吗? – 2013-05-12 08:53:55

+0

这是一个简单的查询。 ;给出了相同的错误 – Jad 2013-05-12 09:01:47

+0

你不能在简单的查询中使用'IF ... ELSE ... END IF',如果你想使用它,你必须创建一个存储过程。但是对于你的问题,有更简单的解决方案。 – 2013-05-12 09:06:41

回答

2

它看起来像你试图做一种形式的T-SQL,MySQL不支持。

没有打印功能,也没有object_id。有IF函数的一种形式,可以在SELECT语句中使用:

SELECT IF(1 = 1, 'present', 'not'); 

你读MSSQL DOCO而不是MySQL的DOCO? MSSQL支持这些功能。

+0

你是对的谢谢 – Jad 2013-05-12 09:07:12

0

每个语句都必须以分号结尾。

像这样

IF object_id('carpool'.'users', 'U') is not null THEN 
    PRINT 'Present!'; 
ELSE 
    PRINT 'Not accounted for'; 
END IF; 
+1

好吧,但是如果他执行一个简单的查询,它将无法正常工作 – 2013-05-12 08:56:23

+0

是的,我告诉语法错误 – Sudz 2013-05-12 08:57:11

1

取决于你是什么之后,你可能想使用这样的事:

SELECT 
    CASE WHEN EXISTS (SELECT NULL 
        FROM information_schema.tables 
        WHERE table_schema = 'carpool' AND table_name = 'users') 
     THEN 'Present' 
     ELSE 'Not accounted for' END; 

这将检查表userscarpool模式存在。请参阅示例here

+0

好吧,这并不回答我的问题,但它确实有助于我想做的事情。我会用你的代码谢​​谢! – Jad 2013-05-12 09:04:42