3

我在 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

4 回答 4

4

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

于 2013-10-14T15:08:34.633 回答
1

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

消息 3701,级别 11,状态 5,第 1 行
无法删除表 'TEST ',因为它不存在或您没有权限
。_ 消息 102,级别 15,状态 1,第 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
) ON [PRIMARY]
它工作正常:
命令已完成成功地。

于 2013-10-14T15:13:14.537 回答
0

始终检查对象是否存在然后将其删除,在此无论表是否存在,您都不会得到错误作为回报,但如果表存在,则表将被删除...

IF OBJECT_ID('dbo.TEST_', 'U') IS NOT NULL
DROP TABLE dbo.TEST_
于 2013-10-14T15:16:19.257 回答
0

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

于 2013-12-05T21:59:33.567 回答