如何在存储过程中查找和替换特定文本?
我有查找和替换查询,但我不知道如何将其发布回存储过程或使用查询结果更新存储过程。
以下是我用于查找和替换的查询:
SELECT
REPLACE (object_definition(object_id('storedprocedure_1')), 'findstring', 'replacestring')
答案 0 :(得分:6)
Declare @spnames CURSOR
Declare @spname nvarchar(max)
Declare @moddef nvarchar(max)
Set @spnames = CURSOR FOR
select distinct object_name(c.id)
from syscomments c, sysobjects o
where c.text like '%findtext%'
and c.id = o.id
and o.type = 'P'
OPEN @spnames
FETCH NEXT
FROM @spnames into @spname
WHILE @@FETCH_STATUS = 0
BEGIN
Set @moddef =
(SELECT
Replace ((REPLACE(definition,'findtext','replacetext')),'ALTER','create')
FROM sys.sql_modules a
JOIN
( select type, name,object_id
from sys.objects b
where type in (
'p' -- procedures
)
and is_ms_shipped = 0
)b
ON a.object_id=b.object_id where b.name = @spname)
exec('drop procedure dbo.' + @spname)
execute sp_executesql @moddef
FETCH NEXT FROM @spnames into @spname
END
这是我能够提出的,它目前正在替换文本并重新创建存储过程。
答案 1 :(得分:0)
您可以像这样获得存储过程的定义:
use <your database>
go
select
definition
from
sys.sql_modules
where
object_id = OBJECT_ID('<your schema.procedure_name>')
这将返回您指定的过程的实际定义。我猜你可以建立一个存储过程列表并一次遍历这个过程。不太确定我建议尝试在sys.sql_modules中更改它们,但至少你可以找到包含你正在寻找的文本的那些。