有沒有辦法讓程序在所有過程中搜索和替換特定的字符串?在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存儲過程中與軟件本身互動的評論,但有太多的程序手動執行它,一個接一個 –
因此,您試圖批量更新存儲過程定義,然後不是用戶表內容? –