Sql-Server

將數據庫複製到現有數據庫中的新模式

  • April 3, 2022

只是好奇是否有一種方法可以創建基於現有數據庫的新模式。

假設現有數據庫只有 dbo 模式。

我將獲取整個數據庫並將其作為該數據庫中的新模式移動到現有數據庫中。

要將所有表複製到目前數據庫中的新模式中:

SELECT 'ALTER SCHEMA New Schema TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];' as 'queries'
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'Old Schema' -- 'dbo' if that is schema name of tables
AND (DbObjects.Type IN ('U', 'P', 'V'))

其中類型“U”表示使用者表,“V”表示視圖,“P”表示儲存過程。

執行上述腳本將生成將對像從一個模式傳輸到頁面底部的另一個內部結果視圖表所需的 SQL 命令。

像這樣的東西:

ALTER SCHEMA Inf TRANSFER [dbo].[t_Link];
ALTER SCHEMA Inf TRANSFER [dbo].[t_News];

現在點擊列標題(查詢)並右鍵點擊,複製所有行,然後粘貼到查詢視窗並執行。

現在所有對像都在您的新模式中。

當我們在數據庫中創建模式而不是在模式中創建數據庫時,我們無法將數據庫從一個模式移動到另一個模式。

相反,我們可以將數據庫的所有對像從一個模式移動到具有數據的相同或不同數據庫上的另一個模式。

有很多方法可以做到這一點,但在這裡我將分享一些簡單的方法來做到這一點,如果你需要移動所有帶有數據的對象:

第一種方法是。

  1. 您可以使用 DTS 或 SSIS 移動所有表
  2. 並以程式方式生成所有對象(視圖、函式、過程和類型)的腳本
  3. 根據目標數據庫更新架構名稱並執行腳本 注意:使用 DTS 或 SSIS 移動所有表不會包括表的索引。因此,您必須生成索引腳本並手動創建它們。

第二:

  1. 生成所有對象的腳本,包括表格。
  2. 根據目標數據庫更改腳本中的模式名稱並執行腳本
  3. 並使用 DTS 或 SSIS 複製所有表的數據

如果您需要移動所有沒有數據的對象,請按照“第二”方法的第 1 步和第 2 步。

您可以使用 powershell 腳本來簡化所有步驟。

謝謝!

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