我需要找出是否SCHEMABINDING在另一個資料庫中使用或不創建特定視圖(在JOIN陳述句中)。目前我正在使用OBJECTPROPERTY(SV.object_id, 'IsSchemaBound'). SV.object_id 獲取另一個資料庫視圖的正確物件 ID。但問題是,根據這個 ms doc,內置函式OBJECTPROPERTY()只能在當前資料庫背景關系中執行。
有沒有辦法OBJECTPROPERTY()在另一個資料庫背景關系中執行函式?或者有什么方法可以獲取IsSchemaBound另一個資料庫的屬性。
uj5u.com熱心網友回復:
您可以直接從相關資料庫的系統視圖中選擇
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';
uj5u.com熱心網友回復:
您可以在目標資料庫的背景關系中使用動態 sql,例如:
exec databasename.sys.sp_executesql N'select ObjectProperty(<objectId>, ''IsSchemaBound'')';
uj5u.com熱心網友回復:
感謝@Charlieface 進行視圖模式系結檢查。
您可以創建一個公用表運算式,然后在您的連接條件中使用它,正如您在評論中提到的那樣。
;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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436444.html
