在大多数 RDBMS 中,元模型是“自包含的”,这意味着我可以通过浏览元模型本身来找出元模型的模型。SQL Server 似乎并非如此。我想做的是:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'INFORMATION_SCHEMA'
这样,我可以发现INFORMATION_SCHEMA
架构本身。
为了使INFORMATION_SCHEMA
视图“自包含”,我必须配置任何授权/权限/登录设置吗?
在大多数 RDBMS 中,元模型是“自包含的”,这意味着我可以通过浏览元模型本身来找出元模型的模型。SQL Server 似乎并非如此。我想做的是:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'INFORMATION_SCHEMA'
这样,我可以发现INFORMATION_SCHEMA
架构本身。
为了使INFORMATION_SCHEMA
视图“自包含”,我必须配置任何授权/权限/登录设置吗?
不要认为这是可能的。
INFORMATION_SCHEMA.TABLES
视图的定义是
CREATE VIEW [INFORMATION_SCHEMA].[TABLES]
AS
SELECT
DB_NAME() AS TABLE_CATALOG,
s.name AS TABLE_SCHEMA,
o.name AS TABLE_NAME,
CASE o.type
WHEN 'U' THEN 'BASE TABLE'
WHEN 'V' THEN 'VIEW'
END AS TABLE_TYPE
FROM
sys.objects o LEFT JOIN sys.schemas s
ON s.schema_id = o.schema_id
WHERE
o.type IN ('U', 'V')
所以它从中提取信息,sys.objects
然而这反过来又不包含任何关于INFORMATION_SCHEMA
对象的信息。
而是通过访问这些元数据sys.system_objects
。
您可以使用 sys.all_views
select SCHEMA_NAME(schema_id), name
from sys.all_views
order by 1,2
USE information_schema;
SHOW TABLES;
USE mysql;
SHOW TABLES ;