Gra*_*ace 5 sql sql-server sql-server-2005
我创建了一个包含现有表副本的新数据库,但更改了这些表的名称,是否有可以运行的 SQL 脚本(可能使用 SysObjects)来更改所有存储过程中对这些表的所有引用?
不要依赖 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 命令。编写必要的过程的脚本,进行更改(搜索/替换或手动),然后运行脚本!
| 归档时间: |
|
| 查看次数: |
5375 次 |
| 最近记录: |