2010-04-13 116 views

回答

15

使用MSysObjects

SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0 
+6

我得到读取权限被拒绝。 – PsychoData 2014-03-10 16:27:24

+1

引发此错误:链接服务器“TEST”的OLE DB提供程序“MSDASQL”返回消息“[Microsoft] [ODBC Microsoft Access Driver]记录无法读取;'MSysObjects'没有读取权限。我将'sa'映射到'Admin'。获得结果需要什么? – ajeh 2015-04-10 16:42:08

+0

刚发现这个:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/8cd6eadd-2d9d-4dbd-8920-e2847a74f80a/retrieve-all-msaccess-table-names-using-openrowset-funtion -in-sql-server?forum = transactsql“因为MSysObjects是Access中的系统表,所以Admin用户没有权限读取它中的数据。” – ajeh 2015-04-10 16:45:03

2

微软的Access有几个系统表是,在默认情况下,从表列表中隐藏。你可以展示他们。

在Ms Access 2007中,右键单击表格列表并选择Navigation Options。在表单底部,您会看到Show System Objects复选框。检查它,系统表将显示在表格列表中。他们都以MSys开头。
或者,可以从应用程序菜单中激活选项表单 - 单击按钮Access options - >选择Current Database并且有Navigation Options按钮。

现在您可以使用MsAccess工具检查结构和内容并生成所有系统表的查询。

亚历克斯回答,表中的信息是MSysObjects

0

This discussion gives类型值的列表。请注意,MS不保证版本之间的值相同。

Type TypeDesc 
-32768 Form 
-32766 Macro 
-32764 Reports 
-32761 Module 
-32758 Users 
-32757 Database Document 
-32756 Data Access Pages 
1 Table - Local Access Tables 
2 Access Object - Database 
3 Access Object - Containers 
4 Table - Linked ODBC Tables 
5 Queries 
6 Table - Linked Access Tables 
8 SubDataSheets 
0
SELECT name FROM MSysObjects where database <> '' 

使用此查询来获取所有链接的表

1

下面的查询的名字让我的范围重新设计/迁移从MS Access到C#& SQL服务器。

注:结合Alex K.KTys提供的答案。
的信念在这里发布,这将是对别人有用的(或自己,如果我必须再次做到这一点)

SELECT 
    SWITCH (
    [type]=-32764,'Report' , 
    [type] = 1, 'Table, local' , 
    [type] = 3, 'obj Containers' , 
    [type] = 4, 'Table, link odbc' , 
    [type] = 5, 'Query' , 
    [type] = 6, 'Table, link access' , 
    [type] = 8, 'SubDataSheets' , 
    TRUE, [type] 
) AS [type name (or #)] 
    , name AS [Table Name] 
FROM 
    MSysObjects 
ORDER BY 
    2, 3 


注意从KTys警告(型号码如有变更)
添加, * select子句来查看其他字段(如connect);他们对我没有帮助。

使用MS Access 2013创建/测试

相关问题