T-SQL查詢access的數(shù)據(jù)表名的列表

字號(hào):

如何用TSQL判斷某個(gè)表在ACCESS中是否存在,也就是如何用tsql顯示access的用戶表,其實(shí)access有一個(gè)隱藏了類(lèi)似于sysobjects的系統(tǒng)表,并且必須設(shè)置權(quán)限才可以訪問(wèn)得到,下面考試大整理的測(cè)試過(guò)程:
    環(huán)境:SQL SERVER 2005,ACCESS2000
    首先,我們讓類(lèi)似于MSSQL的幾個(gè)系統(tǒng)表顯示出來(lái),點(diǎn)擊工具>選項(xiàng)>視圖>系統(tǒng)對(duì)象前面打上勾,點(diǎn)確定,你會(huì)發(fā)現(xiàn)在對(duì)象>表下面多出5個(gè)MS打頭的表,這是就隱藏的系統(tǒng)表。
    接著,我們?nèi)绻诓樵兎治銎髦羞\(yùn)行:
    select name
    from
    OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db1.mdb','select * from MSysObjects')
    報(bào)錯(cuò)如下:
    消息 7357,級(jí)別 16,狀態(tài) 2,第 1 行
    無(wú)法處理對(duì)象 "select * from MSysObjects"。鏈接服務(wù)器 "(null)" 的 OLE DB 訪問(wèn)接口 "microsoft.jet.oledb.4.0" 指示該對(duì)象沒(méi)有列,或當(dāng)前用戶沒(méi)有訪問(wèn)該對(duì)象的權(quán)限。
    其實(shí)這是因?yàn)闆](méi)有權(quán)限的原因造成的,那么我們打開(kāi)這個(gè)操作權(quán)限,考試大提示工具>安全>用戶與組安全>選表msysobjects,設(shè)定權(quán)限,點(diǎn)確定后再運(yùn)行上面的語(yǔ)句看看,
    select name
    from
    OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db1.mdb','select * from MSysObjects')
    where type = 1 and flags = 0
    /*
    name
    ta
    Switchboard Items
    myclass
    ta1
    ta2
    (5 行受影響)
    */
    注:以上考試大測(cè)試的ACCESS內(nèi)的用戶表。