2016-07-07 61 views
-1

後未發現表,我從它刪除某些信息與SQL statment之前保存在SQL表:SQL - 備份

select * into x_table from y_table 

做一些操作後,我想找回從我保存了表中的一些信息與上面的查詢。不幸的是,MS SQL Server MGMTS顯示一個錯誤,說該表不存在。

然而,當我把drop語句,該表中確認的 - 而該表沒有下劃線。

爲什麼這個表由DROP TABLE語句的認可,而不是從語句中選擇任何想法​​。這對我來說似乎很奇怪。

編輯:

enter image description here

謝謝

+0

向我們顯示您的錯誤。 –

+0

你確定你正在創建一個表而不僅僅是一個臨時表嗎?請發佈更多的SQL語句。 –

+0

您是否真的執行了語句並且出現錯誤,或者您是否看到紅色的下劃線/鼠標懸停錯誤。 SSMS非常善於解析你的語句,但是有很多方法可以組合你認爲不同的DDL語句 – Zeph

回答

1

這可能是因爲該表不是在你drop table命令強調,因爲它的名字仍然在你的智能感知的高速緩存。選擇編輯 - >智能感知 - >刷新本地緩存中SSMS(或直接按Ctrl + Shift + R),看看錶名稱帶下劃線即可。

編輯:

另一種可能性是,你drop table命令可能是同一批次的創建表另一份聲明,在這種情況下SSMS將不強調它,因爲它知道,即使表現在不存在,執行該命令的時間將會存在。例如:

Illustration of IntelliSense behavior with table names

onetwo,或three在我的數據庫存在了,當我把這張截圖無。如果我突出顯示第6行並嘗試單獨運行它,它將會失敗。然而,你可以看到two沒有下劃線在第6行,因爲SSMS可以看到,如果我運行整個腳本,該表將第5行創建。另一方面,three強調,第9行,因爲我註釋掉這將創造它在線8

所有提到的代碼,我想我們可能會犯太多這個問題。如果您嘗試從表中刪除select,並且SQL Server告訴您它不存在,那麼它不存在。你不能依靠智能感知來告訴你它確實如此;上面的兩個例子可能不是智能感知可能會誤導您表格當前狀態的唯一方法。

如果你想最簡單的方法來了解與給定名稱的對象(如x_table)是否存在,只需使用:

select object_id('x_table'); 

如果該查詢返回null,x_table不存在,不管是什麼智能感知告訴你。如果它返回非null,那麼某些對象與那個名字,那麼真正的問題是爲什麼你的select語句失敗。爲了回答這個問題,我需要看看這個陳述。

+0

我嘗試了基於其他SOF問題的建議,但沒有機會。該表未列在SSMS表中,這很奇怪。我100%肯定我已經執行了這個聲明。 – user2233979

+1

SSMS上的側欄不會刷新,除非刷新它。右鍵單擊執行命令的數據庫,然後單擊底部的刷新。 –

+0

我用一個或兩個新的想法擴展了@ user2233979。亞瑟D也是一個很好的觀點。 –

-1

很多這樣的帖子,你必須在2個語句複製:

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