Tsql Sybase:if-else错误

Tsql Sybase:if-else错误,tsql,sybase,Tsql,Sybase,我在SAP Interactive SQL(Sybase)中有以下if-else语句: 错误消息: "Could not execute statement. There is already an object named named 'mytable' in the database." 如果我去掉else子句,它会检查表,如果它存在,它会按预期删除它。但它与else子句一起选择最后一个,不管原始表是否存在。因此,错误消息显示该表已经存在。这里有什么问题?我想我的语法是正确的(取自syba

我在SAP Interactive SQL(Sybase)中有以下if-else语句:

错误消息:

"Could not execute statement. There is already an object named named 'mytable' in the database."

如果我去掉else子句,它会检查表,如果它存在,它会按预期删除它。但它与else子句一起选择最后一个,不管原始表是否存在。因此,错误消息显示该表已经存在。这里有什么问题?我想我的语法是正确的(取自sybase文档和其他来源)。

这里的情况是,对于
mytable
,用户所有者不是
'user1'
。所以执行
ELSE
块中的代码,因为
mytable
仍然存在,所以它失败。尝试:

IF EXISTS (SELECT 1 FROM sysobjects o WHERE  o.name = 'mytable' AND o.type = 'U')

您还可以按照不同的方式进行条件删除:

if (object_id('mytable') is not null)                                      
    EXEC('drop table mytable')
试试这个:

IF OBJECT_ID("mytable") IS NOT NULL
    DROP TABLE mytable
GO

SELECT * INTO mytable FROM mytable2
编辑1:

IF OBJECT_ID("mytable") IS NOT NULL
    DROP TABLE mytable

EXEC ("select * INTO mytable FROM mytable2")

不起作用,还是一样的错误。实际上,独立的select语句确实在“sysobjects”中找到了正确的表项,并返回一个带有单个“1”的结果表(我认为应该被视为“true”)。Exists将为非空结果集返回true。您能否提供以下查询的结果:选择名称,从sysobjects中键入,其中名称='mytable'?该查询的结果是:名称:
'mytable'类型:'U'(1行)
您可以直接删除'mytable'吗?是的,我可以手动删除它。如果else子句不存在,我甚至可以将其与if子句一起删除,但两者同时似乎都不起作用。Sybase文档和我参考的任何其他来源都没有使用EXEC版本。2.EXEC语句似乎不适用于PRINT或SELECT。也许我做错了什么,但这就是我所能做的。
IF OBJECT_ID("mytable") IS NOT NULL
    DROP TABLE mytable
GO

SELECT * INTO mytable FROM mytable2
IF OBJECT_ID("mytable") IS NOT NULL
    DROP TABLE mytable

EXEC ("select * INTO mytable FROM mytable2")