如何找出另一个数据库视图的 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)
我需要查明特定视图是否是使用 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)