如果我想在SQL Server中查找引用对象的内容,搜索syscomments是否全面?

如果我想在SQL Server中查找引用对象的内容,搜索syscomments是否全面?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,假设我有一个表中的信息,它位于错误的数据库中,比如Items数据库中的Customer info。我真的很想移动这些信息,但我需要找出谁在使用它。如果我使用这段代码来搜索表名,比如CustomerContactNumber,是否有可能出现遗漏?我将忽略在数据库之外发生的任何组合SQL,我可以在源代码管理中对其进行文本搜索,另外,在这种情况下,您不认为他们的代码应该被破坏吗?。[不是我的代码,我是从某处,可能是在这里取的]: declare @Search varchar(255) SET @S

假设我有一个表中的信息,它位于错误的数据库中,比如Items数据库中的Customer info。我真的很想移动这些信息,但我需要找出谁在使用它。如果我使用这段代码来搜索表名,比如CustomerContactNumber,是否有可能出现遗漏?我将忽略在数据库之外发生的任何组合SQL,我可以在源代码管理中对其进行文本搜索,另外,在这种情况下,您不认为他们的代码应该被破坏吗?。[不是我的代码,我是从某处,可能是在这里取的]:

declare @Search varchar(255) 
SET @Search='%CustomerContactNumbers%' 

SELECT DISTINCT 
    LEFT(so.name, 100) AS Object_Name, 
    "object_type"=left( 
          case so.type 
        when 'U' then 'Table - User' 
        when 'S' then 'Table - System' 
        when 'V' then 'Table - View' 
        when 'TR' then 'Trigger' 
        when 'P' then 'Stored Procedure' 
        when 'C' then 'Constraint - Check' 
        when 'D' then 'Default' 
        when 'K' then 'Key - Primary' 
        when 'F' then 'Key - Foreign' 
        when 'L' then 'Log'           
        when 'R' then 'Rule' 
        when 'RF' then 'Replication Filter stp' 
        else '<<UNKNOWN '''+so.type+'''>>' 
    end  -- case so.type 
        ,25) 
FROM syscomments sc  
    INNER JOIN sysobjects so  
        ON so.id = sc.id 
WHERE 
    text Like '%'+@Search+'%' 
ORDER BY  
    2,1 

够了吗

不完全是这样,因为syscomments被分解成4k块。也就是说,如果对您正在查找的对象的引用恰好位于该4k边界上,那么该查询将不会在任何单个4k块中找到它。如果您使用的是2005+版本,那么您可以使用sys.sql_模块,这将为您提供更好的答案,但您还需要仔细检查可能有定义的其他表,例如检查约束


另一个问题是其他数据库中引用这些对象的对象—这些对象不会被您的查询提取。

您没有指定您使用的SQL Server版本。我假设是2000年,但如果是2005年或更高版本,则应该查看目录视图和/或函数。举个简单的例子:

SELECT SCHEMA_NAME(schema_id) +'.'+ name
FROM sys.objects
WHERE OBJECT_DEFINITION(object_id) LIKE '%' + @Search + '%';

-- or

SELECT OBJECT_SCHEMA_NAME(object_id) +'.'+ OBJECT_NAME(object_id)
FROM sys.sql_modules
WHERE [definition] LIKE '%' + @Search + '%';
此外,您可能还想查看以下有关RedGate新的免费SQL搜索工具的StackOverflow线程,以及一些替代方法:

如果你真的被困在2000年,那么我在大约10年前写的这篇文章可能仍然是相关和有用的,包括适应Matt提到的4K块问题:


哇,4k的边界让问题变得更加棘手。我没有考虑过。隐马尔可夫模型。