Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL-If语句给出语法错误_Mysql - Fatal编程技术网

mySQL-If语句给出语法错误

mySQL-If语句给出语法错误,mysql,Mysql,因此,我有以下疑问: IF ( ( SELECT RevisionNumber FROM SchemaVersion ) > 1 ) THEN BEGIN CREATE TABLE Test ( ID INT ); CREATE TABLE Test2 ( ID INT ); END; END IF 基本上,我想根据表中的一个值(SchemaVersion-始终有一行)来决定是否需要进行某些更改 但是,当我使用此查询时,会收到以下错误消息: #1064 - You hav

因此,我有以下疑问:

IF ( ( SELECT RevisionNumber FROM SchemaVersion ) > 1 ) THEN BEGIN
    CREATE TABLE Test ( ID INT );
    CREATE TABLE Test2 ( ID INT );
END;
END IF
基本上,我想根据表中的一个值(SchemaVersion-始终有一行)来决定是否需要进行某些更改

但是,当我使用此查询时,会收到以下错误消息:

#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 ( ( SELECT RevisionNumber FROM SchemaVersion ) > 1 ) THEN BEGIN
 CREATE T' at line 1
知道为什么会出错/如何修复吗

我刚刚读了另一篇文章,显然
BEGIN
/
END
只允许在存储过程中使用。有没有办法绕过这个问题(不将其放入存储过程中)


感谢使用带括号的IF调用
IF函数,这与
IF语句不同

注意还有一个IF()函数,它不同于IF 这里描述的声明。参见第11.4节“控制流功能”


我认为您需要在存储过程中运行它。如果
语句是所谓的复合语句语法的一部分,并且它仅在存储代码(如触发器、函数或存储过程)中可用,请参见


谢谢!这不是我想要的答案(原因很明显),但指出了问题所在。@judda:因为看起来您正在尝试进行条件架构更新,所以我提供一个建议:您可以编写一个更新脚本,创建一个存储过程,调用它,然后删除它。在过程内部,如果。。。然后
仅应用尚未应用的架构更改。此脚本通过一组平面文件(即ALTER语句)生成,然后一起回显。现在,它们都被合并成一个大的SQL文件,然后使用。我想我可以用create过程和everything调用作为前缀,然后给它一个链接,而不是它所基于的平面文件。好主意:)