这是我的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
答案 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运行,就把它留下来。