Sybase:“IF EXISTS”块中“go”附近的语法不正确

时间:2012-01-06 05:47:16

标签: tsql sybase

这是我的sql语句

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

4 个答案:

答案 0 :(得分: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

有效吗?

答案 1 :(得分:0)

GO不是T-SQL的关键字,而是编辑器的关键字。

SMSS(在其他人之间)将其用作它发送到数据库服务器的批量命令之间的“分区”。在存储过程甚至脚本文件中执行它将不起作用。

编辑:也许它适用于SyBase,但我认为在这种情况下它必须是大写的。

答案 2 :(得分:0)

从文档中,GO语句是您正在使用的编辑器的命令,而不是SQL本身:

  

GO不是Transact-SQL语句;这是一个被公认的命令   sqlcmd和osql实用程序以及SQL Server Management Studio代码   编辑器。

那就是说 - Sybase也是一个支持GO语句的编辑器。

我遇到了同样的问题,但是使用SQL Management Studio。问题是编辑器不支持某些语句的混合换行类型 - GO是其中之一。例如,在Management Studio中,只允许使用Windows样式的换行符(CR + LF),如果我使用的是Linux格式(LF),则会产生与上述完全相同的错误。

Notepad ++(我使用的)等文本编辑器可以选择默认使用哪种类型的行尾字符(Windows,Linux,Mac(CR))。

尝试检查语句中使用的换行符,看看是否可以解决问题。

答案 3 :(得分:-1)

对象引用不应该

dbo..PNL_VALUE_ESTIMATE

因为您没有提供数据库名称,如果您包含obj所有者,您需要..错过数据库名称?

我会去:

EXEC('DROP TABLE dbo..PNL_VALUE_ESTIMATE')

在真正的部分,因为DROP TABLE总是被编译,如果表不存在,你仍然会有失败。

你甚至需要dbo吗?如果你的sql总是作为dbo运行,就把它留下来。