删除表时它表示不存在,创建时表示存在于SQL Server 2008R2中

时间:2013-10-14 15:01:25

标签: sql sql-server

我在SQL Server 2008R2中遇到了一个奇怪的错误:

我有以下声明:

DROP TABLE TEST_
-- here it says that this table doesn't exists

GO    

CREATE TABLE TEST_(
    [ID_] [int] IDENTITY(1,1) NOT NULL,
    [ITEM_] NVARCHAR(255) NOT NULL,
    CONSTRAINT [TEST_] PRIMARY KEY CLUSTERED 
(
    [ID_] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

-- here says that table already exists

请关注评论。这个事实也发生在你身上吗?

我无法重新创建表格。我该怎么办?

PS:我选择了相同的数据库

4 个答案:

答案 0 :(得分:4)

我认为你可能会感到困惑,它抱怨“TEST_”已经存在,但可能意味着约束'test_'已经存在;为约束使用不同的名称,它对我来说没问题。

答案 1 :(得分:1)

由于下一个错误,我无法运行您的查询:

Msg 3701,Level 11,State 5,Line 1
无法删除表'TEST ',因为它不存在或您没有权限._

Msg 102,Level 15,State 1,Line 5
'('。
附近的语法不正确 Msg 319,Level 15,State 1,Line 7
关键字“with”附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句。

但是当我将您的查询修改为:时 CREATE TABLE TEST_(
    [ID_] [int] IDENTITY(1,1)NOT NULL,
    [ITEM_] NVARCHAR(255)NOT NULL
)[主要]
效果很好:
命令已成功完成。

答案 2 :(得分:0)

总是检查对象是否存在,然后删除它,在这个表中是否存在表,你将永远不会得到一个ERROR,但是如果表存在,表将会丢弃...

IF OBJECT_ID('dbo.TEST_', 'U') IS NOT NULL
DROP TABLE dbo.TEST_

答案 3 :(得分:0)

我知道这已经得到了解答,但它可能会帮助有同样错误的人。如果您恰好在Management Studio中创建了一个创建表查询选项卡以创建表(您可以在其中定义列名和数据类型 - 而不是写入sql),则打开该选项卡,使用不同的查询选项卡删除表,最后打开另一个创建表查询选项卡并尝试创建具有相同名称的表,您将收到一条错误消息,表示由于该表已存在而无法创建该表 - 即使后续的DROP或EXISTS查询无法找到该表。解决方案是关闭第一个创建表查询选项卡,它将允许您保存新表。