我建立使用PDO的MSSQL
驅動程序(因爲這樣的事,沒有計劃讓別人,但我使用)一個個人使用 PHP腳本時提供一個表名稱將返回引用的所有對象有沒有辦法判斷表是否在另一個數據庫/服務器中被引用?
使用MySVR.MyDB.dbo.Staff
作爲我的表我第一次開始與這個查詢
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Staff'
AND referenced_server_name IS NULL
AND referenced_database_name IS NULL
ORDER BY
o.name
其中列出了MyDB
其引用我的工作人員表中的所有對象
我知道我的Staff
表用於存儲過程中的另一個數據庫,MySVR.MySecDB.dbo.spMyDB_Staff
。爲了確認,我改變PDO連接字符串,然後重新運行查詢,但與referenced_database_name = 'MyDB'
,以確保我只得到引用MySVR.MyDB.dbo.Staff
而不是MySVR.MySecDB.dbo.Staff
結果。然而
的問題是我如何檢測是否Staff
在MySecDB
被引用或外部MyDB
任何其他數據庫我使用這樣做呢?同樣,如果我的表正在MyOtherSVR.anotherDBDB.dbo.spMySVR_MyDB_Staff
之類的另一臺服務器上引用,我該如何檢測?
我沒想到運行的每一個服務器和數據庫(改變在一個循環中PDO連接字符串)查詢和檢查,如果我得到任何結果,但似乎過度給我。
那麼,有沒有辦法判斷一個表在另一個數據庫/服務器被引用?
如果你有一個世界上所有服務器和所有數據庫的列表(或至少*你的*世界),那麼是的。腳本所有的SQL並解析它的對象引用。否則,這有點像問我是否可以找出中國的人是否有我的電話號碼。在他們打電話給我之前,我只是不知道,因爲要求中國的每個人都是不切實際的。這就是爲什麼應該小心處理鏈接服務器(以及一般的跨數據庫訪問)的原因。 –