2012-01-06 54 views
4

這是我的SQL語句的Sybase:近「走出去」的「IF存在」塊語法不正確

IF EXISTS (select 1 from sysobjects where name = 'PNL_VALUE_ESTIMATE') 
    drop table dbo.PNL_VALUE_ESTIMATE 
go 

ISQL與此錯誤消息

Msg 102, Level 15, State 1: 
Server 'DB_SERVER', Line 3: 
Incorrect syntax near 'go'. 

但SQL語句看起來正確撈出對我來說。怎麼了?

的Sybase版本是15

+0

什麼是'$'呢? – 2012-01-06 06:06:34

+0

請忽略。我使用vi來檢查是否無意中包含了一些垃圾隱形字符,然後複製並粘貼到這裏。我刪除了其他標記,但錯過了這一個。 '$'就是這裏的EOL。 – 2012-01-06 06:19:06

+0

哇 - 想到MS購買和吞下任何sybaseish – 2012-01-06 06:23:07

回答

1

試試這個:

IF EXISTS (select 1 from sysobjects where name = 'PNL_VALUE_ESTIMATE') 
    drop table dbo.PNL_VALUE_ESTIMATE 

go 

或本:

IF EXISTS (select 1 from sysobjects where name = 'PNL_VALUE_ESTIMATE') 
BEGIN 
    drop table dbo.PNL_VALUE_ESTIMATE 
END 

go 

或本:

IF EXISTS (select 1 from sysobjects where name = 'PNL_VALUE_ESTIMATE') 
BEGIN 
    select 1 
END 

go 

有沒有工作?

+0

鏈接鏈接到MySQL參考。我的問題是關於TSQL/Sybase – 2012-01-08 22:05:26

+0

@AnthonyKong抱歉,請嘗試我已編輯的答案。 – 2012-01-09 09:19:12

-1

應該不是對象的引用有

dbo..PNL_VALUE_ESTIMATE

,因爲你沒有給一個數據庫名,如果包含obj的主人,你需要..錯過數據庫名稱?

我會去:

EXEC( 'DROP TABLE dbo..PNL_VALUE_ESTIMATE')

在真正的部分爲好,因爲DROP TABLE總是被編譯,如果表不存在你仍然會失敗。

你甚至需要dbo嗎?如果你的sql總是以dbo的形式運行,那麼就把它拋出去。

+0

我想..是爲了跳過模式名稱,而不是跳過數據庫名稱。 – vstrien 2012-01-11 15:29:35

0

GO不是T-SQL的關鍵字,而是編輯器的關鍵字。

SMSS(在其他人之間)使用它作爲發送給數據庫服務器的批量命令之間的「分隔」。在存儲過程或腳本文件中執行它將不起作用。

編輯:也許它適用於SyBase,但我認爲在這種情況下它需要大寫。

0

從文檔中,GO語句是編輯的命令你使用,不SQL本身:

GO不是Transact-SQL語句;它是由 sqlcmd和osql實用程序和SQL Server Management Studio代碼 編輯器識別的命令。

這就是說 - Sybase也是一個支持GO語句的編輯器。

我有同樣的問題,但與SQL管理工作室。問題在於編輯器不支持某些語句的混合換行符類型 - GO就是其中之一。例如,在Management Studio中,只允許使用Windows風格的換行符(CR + LF),如果我使用Linux格式(LF),則會出現與上述完全相同的錯誤。

的文本編輯器如記事本++(我用的)有什麼類型的結束行字符您使用默認(在Windows,Linux,MAC(CR))的選項。

請檢查什麼換行符(S)是在你的語句中使用,看看是否能解決這個問題。