我有一个存储过程 ID 和名称的列表,我需要找出它们位于服务器中的哪个数据库。是否有捷径可寻?像存储这些信息的系统表?
谢谢
最佳答案
通常对于这种类型的查询,您需要遍历数据库列表(可能使用 sp_MSforeachdb
)并查询每个数据库中的各个系统表。
以下可能对您有用,但可以避免这种情况。第一种方法检查 object_id
和 name
但不验证对象实际上是存储过程。
第二个只是使用评论中要求的名称,也验证对象类型,但只检查默认模式。
WITH objects(name, id)
AS (SELECT 'uspGetBillOfMaterials', 23671132 UNION ALL
SELECT 'uspPrintError', 37575172) SELECT 'Using Id and Name',
sys.databases.name,
objects.name
FROM sys.databases,
objects
WHERE OBJECT_NAME(id, database_id) = objects.name
UNION ALL
SELECT 'Using Name (assumes default schema)',
sys.databases.name,
objects.name
FROM sys.databases,
objects
WHERE OBJECT_ID(databases.name + '..uspGetBillOfMaterials', 'P') IS NOT NULL
关于database - 找出存储过程在哪个数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7741213/