Sybase:使用';'时WHILE语句的行为非常奇怪

时间:2017-03-08 10:31:08

标签: sybase sqlanywhere sybase-iq

在sybase中使用WHILE时遇到一个非常奇怪的问题。 为什么要执行此代码:

UPDATE

而不是这个?

BEGIN
WHILE 'toto' = 'titi'
BEGIN
    DECLARE @val int
    SELECT * FROM randomtable1
    SELECT * FROM randomtable2
    END
END 

事实上我注意到我使用';'的那一刻在我的脚本中,在WHILE语句之内或之外,Sybase在WHILE之后的BEGIN附近返回语法错误。 我已经阅读并重读了sybase文档和搜索,我不明白这里发生了什么。

我给出的示例是重现我所遇到的错误的简化,但这不是我正在尝试的真实脚本。

请注意我正在实习,而且我第一次发现了Sybase。我很害怕我错过了一些明显的东西。

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

看起来您正在混合Watcom SQL(原始的SQL Anywhere方言)和Transact-SQL(来自SYbase ASE,部分也受SQL Anywhere支持)。您不能在同一个SQL批处理中混合使用这两个。

  • Watcom使用&#39 ;;'作为语句分隔符,Transact-SQL在看到';'

  • 时会抛出错误
  • Transact-SQL使用BEGIN-END进行语句分组,就像您一样;使用WHILE。但是,在Watcom中,BEGIN-END不对语句进行分组,而是一个异常处理单元。

  • 在Watcom,使用' WHILE ... LOOP ... END LOOP;'语法