最近我注意到,微软Docs网站上的用法视图文档包含了对VIEW_SCHEMA和TABLE_SCHEMA列的警告:
**重要**查找对象架构的唯一可靠方法是查询sys.objects目录视图。 碳化硅
这一警告必须有具体的理由,而且只限于这两个领域。警告的原因是什么?它知道在什么情况下这个information_schema视图可以得到错误的模式字段吗?
我需要知道我应该有多关心;以及我需要多努力才能替换使用该视图的现有代码。
发布于 2021-06-24 23:47:29
这可能只是一个部分的答案,但也许对你来说已经足够了,或者它可以让其他人得到一个更完整的答案。但我可以告诉你:
exec sp_helptext 'information_schema.view_column_usage'返回:
SELECT
DB_NAME() AS VIEW_CATALOG,
SCHEMA_NAME(v.schema_id) AS VIEW_SCHEMA,
v.name AS VIEW_NAME,
DB_NAME() AS TABLE_CATALOG,
SCHEMA_NAME(t.schema_id) AS TABLE_SCHEMA,
t.name AS TABLE_NAME,
c.name AS COLUMN_NAME
FROM
sys.views v JOIN sys.sql_dependencies d ON d.object_id = v.object_id
JOIN sys.objects t ON t.object_id = d.referenced_major_id
JOIN sys.columns c ON c.object_id = d.referenced_major_id
AND c.column_id = d.referenced_minor_id
WHERE
d.class < 2 如您所见,view_schema和table_schema都利用schema_name()。而且,正如在这问题和其他地方所描述的那样,这个函数有时会根据查询是跨数据库的还是用户的默认模式与其他人的不同而提供不同的结果。
我从来没有见过information_schema查询在模式字段中给出意外的结果,也许sys.views和sys.tables的输出是不可能的( null schema_id会造成问题),但是使用schema_name()的这种一般行为可能已经足够给出免责声明。
https://stackoverflow.com/questions/68123509
复制相似问题