2017-03-08 78 views
0

在sybase中使用WHILE時遇到了一個非常奇怪的問題。 爲什麼這段代碼執行: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在WHILE之後的BEGIN附近返回語法錯誤。 我已閱讀並重新閱讀sybase文檔和搜索,我不明白這裏發生了什麼。

我給出的例子是簡化重現我有的錯誤,但這不是我想要做的真正的腳本。

請注意,我正在實習,我第一次發現Sybase。我很害怕我錯過了一些明顯的東西。

有什麼想法?

在此先感謝

回答

1

看起來你是混合WATCOM SQL(原始,原生SQL Anywhere的方言)和Transact-SQL(從Sybase ASE,部分也由SQL Anywhere支持)。你不能在同一個SQL批處理中混合使用兩者。

  • Watcom使用';'作爲語句分隔符,Transact-SQL在發現';'時會引發錯誤

  • 對於語句分組,Transact-SQL使用BEGIN-END作爲語句分組,與WHILE一起使用。但是,在Watcom中,BEGIN-END不會將語句分組,但是是異常處理的一個單元。

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

+0

謝謝你的回答,它有很大的幫助! – Cheniflo