在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。我很害怕我错过了一些明显的东西。
有什么想法吗?
提前致谢
答案 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;'语法