首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要警告VIEW_COLUMN_USAGE.VIEW_SCHEMA?

为什么要警告VIEW_COLUMN_USAGE.VIEW_SCHEMA?
EN

Stack Overflow用户
提问于 2021-06-24 22:48:06
回答 1查看 213关注 0票数 0

最近我注意到,微软Docs网站上的用法视图文档包含了对VIEW_SCHEMA和TABLE_SCHEMA列的警告:

**重要**查找对象架构的唯一可靠方法是查询sys.objects目录视图。 碳化硅

这一警告必须有具体的理由,而且只限于这两个领域。警告的原因是什么?它知道在什么情况下这个information_schema视图可以得到错误的模式字段吗?

我需要知道我应该有多关心;以及我需要多努力才能替换使用该视图的现有代码。

EN

回答 1

Stack Overflow用户

发布于 2021-06-24 23:47:29

这可能只是一个部分的答案,但也许对你来说已经足够了,或者它可以让其他人得到一个更完整的答案。但我可以告诉你:

代码语言:javascript
复制
exec sp_helptext 'information_schema.view_column_usage'

返回:

代码语言:javascript
复制
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_schematable_schema都利用schema_name()。而且,正如在问题和其他地方所描述的那样,这个函数有时会根据查询是跨数据库的还是用户的默认模式与其他人的不同而提供不同的结果。

我从来没有见过information_schema查询在模式字段中给出意外的结果,也许sys.views和sys.tables的输出是不可能的( null schema_id会造成问题),但是使用schema_name()的这种一般行为可能已经足够给出免责声明。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68123509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档