有没有办法让程序在所有过程中搜索和替换特定的字符串?在SQL Server中的过程中替换字符串
回答
也许修复应用程序会更容易。为什么软件关心评论?它是否也扩展属性barf?
假设注释始终是相同的,在Management Studio与运行结果这个文本:
SET NOCOUNT ON;
SELECT 'GO
' + REPLACE([definition], '/* offending comment */', '')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
这将产生一系列由GO
分离CREATE PROCEDURE
命令。如果在存储过程主体中有实际的CREATE PROCEDURE
字符串,则您无需为CREATE PROCEDURE
进行搜索/创建并将其更改为ALTER
。因此,你可以拉这些结果到你喜欢的文本编辑器,并做了搜索和替换为:
GO
CREATE PROCEDURE
与替换它:
GO
ALTER PROCEDURE
(虽然这个假设你没有意见。的CREATE PROCEDURE
前行如果你这样做,你会如果你不需要担心包含一个有效的字符串CREATE PROCEDURE
程序需要得到您更多的创意和替换)
- 一个d假设你的语法实际上是CREATE PROCEDURE
,而不是CREATE PROC
或CREATE
和PROC
之间和你的系统不区分大小写,您使用create proc
或Create Proc
随机间距......
SET NOCOUNT ON;
SELECT 'GO
' + REPLACE(REPLACE([definition], '/* offending comment */', ''),
'CREATE PROCEDURE', 'ALTER PROCEDURE')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
如果你不关心与您的存储过程相关的现有有形事物,例如权限,你也可以这样来做:
SELECT 'DROP PROCEDURE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id])) + ';
' + 'GO
' + REPLACE([definition], '/* offending comment */', '')
FROM sys.sql_modules
WHERE [definition] LIKE '%/* offending comment */%';
这将生成一个脚本,更接近于准备走了,因为它只是下降的过程并重新创建它(所以并不需要改变CREATE
至ALTER
),但由于权限和/或依赖关系,您可以删除并重新创建对象的情况并不常见。
CREATE OR REPLACE
或者类似的DDL会让这个脚本更容易编写出来。如果你觉得这将是一个有价值的除了SQL Server中,请投给了以下建议(并添加你的使用情况,或者为什么你认为这将是宝贵的,对评论):
http://connect.microsoft.com/SQLServer/feedback/details/127219/create-or-replace
非常感谢您的解释!关于干扰的评论,其原因在于它不存在/不存在的一条线,并且由于我们正在讨论大量程序和线条,因此需要手动完成。 –
哦,确认!谢谢亚伦伯特兰非常有用的脚本。我有一组存储过程在2个表上运行“更新统计信息”,我不得不改变他们说“更新统计信息与fullscan,列”。这(你的第二个)完成了我想做的事 - 生成ALTER脚本。与“sp_MSforEachDB”循环集成在一起! – NateJ
不,请不要使用sp_msforeachdb:http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx –
如何关于将所有这些存储过程的脚本生成为.sql文件,然后在CTRL + H的帮助下替换该生成文件中的注释。难道不是更简单的选项吗?
它可能是,但是如果有5,000个过程,并且只有150个过程包含注释...所以如果要将它限制为包含注释的过程(需要'WHERE'子句),为什么不添加'REPLACE ()'调用之前,你得到的输出? –
我绝对看到你的观点。但是,如果我们通过向导生成它,脚本的格式保持不变。而如果我们运行自己的查询来获取此信息,我认为格式化会花费一些时间,我想知道它是否会混淆作者。如果所有的注释都在SP的开头,那应该没问题,但是如果我们想要替换那个SP中的特定代码块的注释呢? – vmvadivel
为什么要格式化“折腾”?也许如果您将结果用于网格,但文本结果应该是准确的(只要没有一个过程长于最大文本输出)。至于评论的类型以及评论在程序主体中的位置,这两个都不重要,尽管我们不知道是由于缺乏问题的细节。 –
- 1. 替换SQL Server中的字符串
- 2. SQL Server替换字符串中的字符
- 3. SQL Server 2008替换子字符串
- 4. 在SQL Server中替换大量的字符串数据
- 5. 在SQL字符串替换
- 6. 在SQL Server中用整数替换字符串
- 7. 在sql server 2000中替换ntext(超过4000个字符)
- 8. 用SQL存储过程中的字符串中的另一个子字符串替换特定子字符串
- 9. 使用SQL Server替换字符串替换函数 - 字符串有超过4000个字符 - 该怎么办?
- 10. 替换表中的字符串sql
- 11. 替换sql中的字符串
- 12. 查找并替换SQL Server 2005中的字符串
- 13. 如何替换SQL Server表中的字符串列
- 14. 如何替换SQL Server 2005中的所有字符串?
- 15. 字符串中的字符串替换
- 16. SQL Server 2012替换动态sql中的Select语句中的字符串
- 17. SQL Server中的字符串
- 18. 根据表中的行替换字符串中的字符sql
- 19. 在SQL Server中替换整个表中的字符
- 20. 如何在sql server中替换存储过程中的union
- 21. 替换字符串SQL
- 22. T-SQL字符串替换
- 23. 字符串替换sql select
- 24. SQL子字符串替换
- 25. 替换字符串中的\”
- 26. SQL Server:返回字符串过程INITCAP
- 27. 在字符串中替换字符
- 28. 如何从SQL Server中的字符串替换特殊字符'<'?
- 29. 如何替换字符串在SQL Server的数据行
- 30. 替换字符串的开始在SQL
请多一些信息。你是否试图搜索每个表格或特定字段的每个字段? – Marc
我试图替换SQL存储过程中与软件本身互动的评论,但有太多的程序手动执行它,一个接一个 –
因此,您试图批量更新存储过程定义,然后不是用户表内容? –