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

Sybase: Very strange behaviour on WHILE statement when using ';'

我在sybase中使用WHILE遇到了一个很奇怪的问题。 为什么执行此代码:

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

不是这个?

BEGIN
DECLARE @val INT;

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

事实上我注意到我使用';'的那一刻在我的脚本中,在 WHILE 语句之内或之外,Sybase returns 在 WHILE 之后的 BEGIN 附近出现语法错误。 我反复阅读了 sybase 文档并进行了搜索,但我不明白这里发生了什么。

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

请注意,我正在实习并且是第一次接触 Sybase。我害怕我错过了一些明显的东西。

有什么想法吗?

提前致谢

您似乎在混合使用 Watcom SQL(原始的本地 SQL Anywhere 方言)和 Transact-SQL(来自 SYbase ASE,[=27 也部分支持=] 任何地方)。您不能在同一个 SQL 批次中混合使用两者。

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

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

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