我建立使用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并解析它的对象引用。否则,这有点像问我是否可以找出中国的人是否有我的电话号码。在他们打电话给我之前,我只是不知道,因为要求中国的每个人都是不切实际的。这就是为什么应该小心处理链接服务器(以及一般的跨数据库访问)的原因。 –