用于更改所有存储过程中的所有表引用的 SQL 脚本

Gra*_*ace 5 sql sql-server sql-server-2005

我创建了一个包含现有表副本的新数据库,但更改了这些表的名称,是否有可以运行的 SQL 脚本(可能使用 SysObjects)来更改所有存储过程中对这些表的所有引用?

KM.*_*KM. 4

不要依赖 INFORMATION_SCHEMA.ROUTINES,因为ROUTINE_DEFINITION它只是nvarchar(4000). 你需要nvarchar(max) 在sys.sql_modules哪里definition

尝试以下任一方法来查找您需要修改的过程:

SELECT DISTINCT
    LEFT(s.name+'.'+o.name, 100) AS Object_Name,o.type_desc --, m.definition
    FROM sys.sql_modules        m
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
        INNER JOIN sys.schemas  s ON o.schema_id=s.schema_id
    WHERE m.definition Like '%'+@SearchValue+'%'
    ORDER BY 1

SELECT
    OBJECT_SCHEMA_NAME(m.object_id)+'.'+OBJECT_NAME(m.object_id) --, m.definition
    FROM sys.sql_modules  m
    WHERE m.definition like '%whatever%'

SELECT
    OBJECT_SCHEMA_NAME(m.object_id)+'.'+OBJECT_NAME(m.object_id), o.type_desc
        --,m.definition
    FROM sys.sql_modules        m
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
    WHERE m.definition like '%whatever%'
Run Code Online (Sandbox Code Playgroud)

您可以取消注释m.definition来列出内容,但我发现最好只识别所有过程,然后手动检查它们,因为您不想在系统表上运行 UPDATE 命令。编写必要的过程的脚本,进行更改(搜索/替换或手动),然后运行脚本!