表的刪除重建問題,稍微測試了一下。具體內(nèi)容如下: 1.常規(guī)表的重建 if exists(select * from sys.objects where name='tmp' and type='U') type='U'通常是用來防止,起名時和系統(tǒng)的對象同名。如果可以保證沒有,可以不帶。
2.臨時表的重建 臨時表和普通表是不同的,它們存放在tempdb中,所以在sys.objects中是查不到的。 所以下面的例子不能得到正確的結(jié)果,因為drop語句不會運行,exists的條件不會為true。 IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='#temp')
正確的寫法如下: if (object_id('tempdb..#tmp') is not null)
看到網(wǎng)上有下面的寫法,這種寫法在語法檢查的時候是對的。但是實際是存在錯誤的。 if exists (select object_id('Tempdb..#temp') ) DROP TABLE #temp go 上面的語句在#temp已經(jīng)創(chuàng)建的情況下是可以正確運行的,但是當(dāng)#temp不存在或者已經(jīng)被drop掉了,則會報錯。 因為exists的定義是Returns TRUE if a subquery contains any rows,并且Using NULL in a subquery to still return a result set(參考:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/exists-transact-sql) 即object_id('Tempdb..#temp')為null,也會執(zhí)行drop。 |
|