日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SQLServer中表的刪除重建語句

 hdzgx 2019-12-10

表的刪除重建問題,稍微測試了一下。具體內(nèi)容如下:

1.常規(guī)表的重建

if exists(select * from sys.objects where name='tmp' and type='U')
    drop table tmp
else
    create table tmp
    (
    id int,
    name varchar(20)
    )

type='U'通常是用來防止,起名時和系統(tǒng)的對象同名。如果可以保證沒有,可以不帶。

 

2.臨時表的重建

臨時表和普通表是不同的,它們存放在tempdb中,所以在sys.objects中是查不到的。

所以下面的例子不能得到正確的結(jié)果,因為drop語句不會運行,exists的條件不會為true。

IF  EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='#temp')
  DROP TABLE #temp
GO
SELECT *
INTO #temp
FROM [dbo].[Table_1]
GO

 

正確的寫法如下:

 if (object_id('tempdb..#tmp') is not null)
    drop table #tmp
else
 create table #tmp(id int,name varchar(20))

 

看到網(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。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多