MsSql中有一個存儲過程。我想添加這個存儲過程只需一行額外的代碼,但我想在大約20個數據庫中完成。所以顯然我不想右鍵單擊>修改它們中的每一個。我想創建一個腳本來做到這一點,但問題是,這個存儲過程的修改腳本大約是550行,我不想將所有這些行添加到我的升級腳本中,因爲已經有數千行腳本中的行。在沒有修改的情況下將額外代碼添加到存儲過程
我發現了這樣的解決方案;它基本上做的是獲取存儲過程的創建腳本,找到一個特定的唯一行('append_5 = zr.append_5,')並將其替換爲我想要的行('append_5 = zr.append_5,before_head = zr.before_head,before_body = zr.before_body,')。
Declare @prDefinition nvarchar(MAX);
SET @prDefinition = (select object_definition(object_id) proceduredefinition from sys.procedures where name = 'cms_asp_approval_approve_zone_revision')
IF CHARINDEX('append_5 = zr.append_5, before_head = zr.before_head, before_body = zr.before_body,',@prDefinition) <= 0
BEGIN
SET @prDefinition = REPLACE(@prDefinition,'append_5 = zr.append_5,','append_5 = zr.append_5, before_head = zr.before_head, before_body = zr.before_body,')
SET @prDefinition = REPLACE(@prDefinition,'CREATE procedure [dbo].[cms_asp_approval_approve_zone_revision]','ALTER procedure [dbo].[cms_asp_approval_approve_zone_revision]')
EXEC (@prDefinition)
END
GO
這工作正常,但這當然是最壞的情況下,真的是沒有任何保證。你有什麼更專業的方法來解決這個問題?
編輯:我當然知道創建一個「ALTER」腳本可以解決這個問題,但它給了我550個額外的行,我不想要。我想要一個較短的腳本。
不太清楚,如果我理解正確的問題。所有20個數據庫中存儲的數據庫是否相同,並且您需要應用相同的更改? –
是的,確切地說。他們都是一樣的,我想要應用相同的更改 –
然後,只需在某些數據庫中爲您的過程創建更改腳本,應用更改,然後將此腳本應用於所有數據庫 –