如何找出另一个数据库视图的 IsSchemaBound 属性

How to find out the IsSchemaBound property of a view of another database

我需要查明特定视图是否是使用 SCHEMABINDING 创建的,或者不是在另一个数据库中(在 JOIN 语句中)。目前我正在使用 OBJECTPROPERTY(SV.object_id, 'IsSchemaBound')。 SV.object_id 获取另一个数据库视图的正确对象 ID。但问题是,内置函数 OBJECTPROPERTY() 只能根据 this ms doc.

在当前数据库上下文中执行

有没有办法在另一个数据库上下文中执行 OBJECTPROPERTY() 函数? 或者有什么方法可以获取另一个数据库的IsSchemaBound 属性。

您可以在目标数据库的上下文中使用动态sql,例如:

exec databasename.sys.sp_executesql N'select ObjectProperty(<objectId>, ''IsSchemaBound'')';

直接从相关数据库的系统视图中select即可

select v.*,
  m.is_schema_bound
from YourDB.sys.views v
join YourDB.sys.sql_modules m on m.object_id = v.object_id
where v.name = 'SomeView';

感谢@Charlieface 进行视图架构绑定检查。

您可以创建一个通用的 table 表达式,然后在您的连接条件中使用它,正如您在评论中提到的那样。

;with cte_schemaboundViews(Name) AS
(select v.name,
  from YourDB.sys.views v
join YourDB.sys.sql_modules m on m.object_id = v.object_id
WHERE is_schema_bound = 1
)
SELECT * -- Your columns
FROM YourSchemaName.YourTableName AS IV  -- yourTableName
JOIN cte_schemaboundViews AS SV
ON CONVERT(VARCHAR(MAX), IV.TABLE_NAME) = CONVERT(VARCHAR(MAX), SV.NAME)