Sql-Server

在主數據庫的觸發器和視圖中更新審計數據庫名稱?

  • August 28, 2020

我有一個帶有兩個數據庫的系統,主數據庫和審計數據庫。主數據庫和審計數據庫中的許多觸發器和表視圖都從一個數據庫引用到另一個數據庫。不,我需要更改兩個數據庫名稱,但不幸的是它們無法工作,因為它們在程式碼中仍然有舊名稱。

是否有程式碼可以搜尋和替換用於引用或依賴的舊名稱?

謝謝,

您可以使用來自的文本列sys.all_sql_modules來創建具有新數據庫名稱的更改腳本。下面是一個範例,我使用 AdventureWorks2014 將任何有 a 的文本替換CREATEALTER同時將數據庫名稱更改HumanResourcesHR. 同樣,這只會生成您的腳本。

編輯:替換syscommentsall_sql_modules. 謝謝肯尼斯·費舍爾!

USE AdventureWorks2014
GO

SELECT 
   o.name,
   o.type,
   o.type_desc,
   sc.definition,
   REPLACE(REPLACE(sc.definition, 'CREATE ', 'ALTER '),'[HumanResources]','[HR]')
FROM sys.all_sql_modules sc
   inner join sys.objects o 
       on sc.object_id = o.object_id
WHERE o.type IN ('V','TF','P','TR') --Views, Table Function, Proc, Trigger. You can include/exclude additional types if you choose.

希望這可以幫助!

最好的方法是生成腳本>僅選擇表>在高級選項中將觸發器更改為True,將其他所有內容更改為False>為新查詢生成腳本>查找所有CREATE TABLE程式碼並刪除它們>查找CREATE TRIGGER並替換它使用ALTER TRIGGER > 查找舊數據庫名稱並將其替換為新數據庫名稱 > 然後執行程式碼。

這應該使用新的數據庫名稱作為參考更新所有觸發器。

引用自:https://dba.stackexchange.com/questions/125544