我在使用sql statment删除一些信息之前保存了一个SQL表:
select * into x_table from y_table
执行某些操作后,我想从上面查询保存的表中获取一些信息。不幸的是,MS SQL Server MGMTS显示错误,表明该表不存在。
然而,当我放下drop语句时,表被识别 - 并且表没有加下划线。
任何想法为什么drop table语句而不是select from语句都能识别这个表。这对我来说似乎很奇怪。
编辑:
谢谢
答案 0 :(得分:1)
可能是drop table
命令中的表没有加下划线,因为它的名称仍在您的IntelliSense缓存中。选择编辑 - >智能感知 - >在SSMS中刷新本地缓存(或者只需按Ctrl
+ Shift
+ R
),然后查看表名是否加下划线。
修改强>
另一种可能性是你的drop table
命令可能与创建表的另一个语句在同一批次中,在这种情况下SSMS不会强调它,因为它知道即使表现在不存在,将在执行命令时存在。例如:
当我拍摄此屏幕截图时,我的数据库中没有任何表格one
,two
或three
。如果我突出显示第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;