Tsql Sybase:靠近'的语法不正确;go';在';如果存在';块

Tsql Sybase:靠近'的语法不正确;go';在';如果存在';块,tsql,sybase,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

这是我的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

请尝试以下操作:

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
或者这个:

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


有用吗?

对象引用不应该

dbo..PNL_值_估计值

因为您没有提供数据库名称,如果您包括所需的obj所有者。。错过数据库名称

我会去:

EXEC('DROP TABLE dbo..PNL\u VALUE\u ESTIMATE')

在真正的部分也是如此,因为DROP表总是被编译的,如果表不在那里,您仍然会失败


你需要dbo吗?如果您的sql始终以dbo的形式运行,请将其忽略。

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

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


编辑:可能它与SyBase一起使用,但我认为在这种情况下需要大写。

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

GO不是Transact-SQL语句;这是一个由用户识别的命令 sqlcmd和osql实用程序以及sqlserver管理工作室代码 编辑

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

我也遇到过同样的问题,但是使用SQL Management Studio。问题是编辑器不支持某些语句周围的混合换行符类型-
GO
是其中之一。例如,在ManagementStudio中,只允许使用Windows样式的换行符(CR+LF),如果我使用Linux格式(LF),它将给出与上面相同的错误

诸如Notepad++(我使用的)之类的文本编辑器可以选择默认情况下使用的行尾字符类型(Windows、Linux、Mac(CR))


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

请忽略此问题。我用vi检查我是否无意中包含了一些垃圾看不见的字符,然后复制并粘贴到这里。我移走了另一个记号笔,但漏掉了这个这里是指EOL。哇-我以为MS买了并吞下了SybaseIsh的任何东西,你是如何调用这个查询的?@adriy我在bash Shell中使用isql你的问题可能有类似的解释。链接链接链接到MySQL引用。我的问题是关于TSQL/Sybase的,我想。。用于跳过架构名称,而不是跳过db名称。