Sql-Server
使用條件更改視圖的特定行
我最近開始在一家維護四百五百個客戶數據庫的公司工作,並且正在對程式碼進行各種維護任務(畢竟我是初級水平)。我的任務是在整個公司範圍內的一組視圖中辨識一個特定的錯誤,並更改每一個。我已經能夠通過 SQLSearch(一個救命稻草)辨識出所有的罪魁禍首,但現在我的任務是在近 1,200 個視圖中將一個特定的程式碼行修改為新標準。
我知道:
- 錯誤的程式碼行(有 3 種變體,我都知道這三種)
- 我需要用正確的程式碼行替換錯誤的行
- 哪些視圖和哪些數據庫有錯誤。
- 每個數據庫中有多少視圖目前“錯誤”
如何在不手動操作的情況下輕鬆修改視圖以更正錯誤?
這很容易用 PowerShell 實現(您可以在其中使用正則表達式來完成您的工作)但為了簡單起見,我將使用 t-sql 解決方案和一個簡化範例,如下所示
-- assume you have a view called dbo.v and you want to replace one line in this view use tempdb go drop view dbo.v go create view dbo.v as select A = 'test 1' union all select A = 'test 2' -- we will change this to 'test 222' union all select A = 'test 3' go -- assume we will replace the line select A = 'test 2' declare @sql varchar(max); declare @original_string varchar(300) = 'select A = ''test 2'''; declare @replace_string varchar(300) = 'select A = ''test 222'''; select @sql=definition from sys.sql_modules where object_id = object_id('dbo.v') set @sql = replace(@sql, @original_string, @replace_string); set @sql = replace(@sql, 'create view', 'alter view'); --print @sql -- uncomment it if needed exec (@sql) go