SQL - 备份后找不到表

时间:2016-07-07 14:00:03

标签: sql sql-server tsql

我在使用sql statment删除一些信息之前保存了一个SQL表:

select * into x_table from y_table

执行某些操作后,我想从上面查询保存的表中获取一些信息。不幸的是,MS SQL Server MGMTS显示错误,表明该表不存在。

然而,当我放下drop语句时,表被识别 - 并且表没有加下划线。

任何想法为什么drop table语句而不是select from语句都能识别这个表。这对我来说似乎很奇怪。

编辑:

enter image description here

谢谢

2 个答案:

答案 0 :(得分:1)

可能是drop table命令中的表没有加下划线,因为它的名称仍在您的IntelliSense缓存中。选择编辑 - >智能感知 - >在SSMS中刷新本地缓存(或者只需按Ctrl + Shift + R),然后查看表名是否加下划线。

修改

另一种可能性是你的drop table命令可能与创建表的另一个语句在同一批次中,在这种情况下SSMS不会强调它,因为它知道即使表现在不存在,在执行命令时存在。例如:

Illustration of IntelliSense behavior with table names

当我拍摄此屏幕截图时,我的数据库中没有任何表格onetwothree。如果我突出显示第6行并尝试自行运行它,它将失败。但是你可以看到two没有在第6行下划线,因为SSMS可以看到,如果我运行整个脚本,表格将在第5行创建。另一方面,three 在第9行下划线,因为我注释掉了将在第8行创建它的代码。

所有这些都说,我认为我们可能会过多地解决这个问题。如果您尝试从表中select并且SQL Server告诉您它不存在,则它不存在。你不能依靠IntelliSense来告诉你它的确如此;上面的两个示例可能不是IntelliSense可能误导您关于表的当前状态的唯一方法。

如果您想要最简单的方法来了解具有给定名称的对象(如x_table)是否存在,只需使用:

select object_id('x_table');

如果此查询返回null,则x_table不存在,无论IntelliSense告诉您什么。如果它返回非null,那么那个带有该名称的对象,然后真正的问题是你的select语句失败的原因。要回答这个问题,我需要看一下这个陈述。

答案 1 :(得分:-1)

很多像这样的帖子,你必须复制2个语句:

CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable;