如何使用SQL Server更改架構將安全對象從一種架構轉移到另外一種架構。
SQL Server更改架構概述
該ALTER SCHEMA
語句容許您將安全對象從架構轉移到同一數據庫中的另外一個架構。
請注意,安全對象是數據庫引擎受權系統控制對其進行訪問的資源。例如,表是安全的。
下面顯示了該ALTER SCHEMA
語句的語法:
ALTER SCHEMA target_schema_name TRANSFER [ 實體對象 :: ] securable_name;
- target_schema_name是當前數據庫中您要將對象移動到的架構的名稱。 請注意,它不能是SYS或INFORMATION_SCHEMA。
- 實體類型能夠是對象,類型或XML架構集合。 默認爲對象。 entity_type表明要爲其更改全部者的實體的類。
- object_name是要移到target_schema_name中的安全對象的名稱
若是移動存儲過程,函數,視圖或觸發器,則SQL Server不會更改這些安全對象的架構名稱。 所以,建議您在新架構中刪除並從新建立這些對象,而不要使用ALTER SCHEMA語句進行移動。
若是移動對象(例如表或同義詞),SQL Server將不會自動更新這些對象的引用。您必須手動修改引用以反映新的架構名稱。例如,若是移動存儲過程當中引用的表,則必須修改存儲過程以反映新的架構名稱。
SQL Server更改架構示例
首先,在dbo架構中建立一個名爲office的新表:
CREATE TABLE dbo.offices ( office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR(40) NOT NULL, office_address NVARCHAR(255) NOT NULL, phone VARCHAR(20), );
INSERT INTO dbo.offices(office_name, office_address) VALUES ('Silicon Valley','400 North 1st Street, San Jose, CA 95130'), ('Sacramento','1070 River Dr., Sacramento, CA 95820');
而後,建立一個存儲過程,按辦公室ID查找辦公室:
CREATE PROC usp_get_office_by_id( @id INT ) AS BEGIN SELECT * FROM dbo.offices WHERE office_id = @id; END;
以後,將此dbo.offices
錶轉移到sales
架構:
ALTER SCHEMA sales TRANSFER OBJECT::dbo.offices;
若是執行usp_get_office_by_id
存儲過程,SQL Server將發出錯誤:
最後,手動修改存儲過程以反映新的架構:
ALTER PROC usp_get_office_by_id( @id INT ) AS BEGIN SELECT * FROM sales.offices WHERE office_id = @id; END;
SQL Server DROP架構
DROP SCHEMA
語句從數據庫中刪除架構。
SQL Server刪除架構語句概述
該DROP SCHEMA
語句容許您從數據庫中刪除架構。下面顯示了該DROP SCHEMA
語句的語法:
DROP SCHEMA [IF EXISTS] schema_name;
使用如下語法:
- 首先,指定要刪除的架構的名稱。若是架構包含任何對象,則該語句將失敗。所以,您必須在刪除架構以前刪除架構中的全部對象。
- 其次,
IF EXISTS
僅當架構存在時,才使用該選項有條件地刪除該架構。嘗試刪除不帶該IF EXISTS
選項的不存在的架構將致使錯誤。
SQL Server刪除架構語句示例
首先,建立一個名爲logistics的新架構:
CREATE SCHEMA logistics; GO
接下來,在logistics架構內部建立一個名爲delivery的新表:
CREATE TABLE logistics.deliveries ( order_id INT PRIMARY KEY, delivery_date DATE NOT NULL, delivery_status TINYINT NOT NULL );
而後,刪除架構logistics
:
DROP SCHEMA logistics;
SQL Server發出如下錯誤,由於架構不爲空。

DROP TABLE logistics.deliveries;
最後,DROP SCHEMA
再次發出以刪除logistics
架構:
DROP SCHEMA IF EXISTS logistics;
如今,logistics
架構已從數據庫中刪除。