📜  如何重命名 SQL Server 架构?

📅  最后修改于: 2022-05-13 01:55:22.313000             🧑  作者: Mango

如何重命名 SQL Server 架构?

在 SQL 中,我们不能重命名 SCHEMA。为此,我们需要创建一个新的 SCHEMA,将所有内容(对象)从旧模式转移到新模式,最后使用 DROP 命令删除旧模式。下面的文章中描述了相同的内容。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。

步骤 1:显示系统中所有当前存在的模式。

询问:

SELECT * FROM SYS.SCHEMAS;

输出:

第 2 步:创建一个名为 OLDSCHEMA 的模式。

句法:

CREATE SCHEMA SCHEMA_NAME;

询问:

CREATE SCHEMA OLDSCHEMA;

输出:

第 3 步:显示系统中所有当前存在的模式。

询问:

SELECT * FROM SYS.SCHEMAS;

注意:OLDSCHEMA 现在应该在模式列表中可见。

输出:

第 4 步:在模式 OLDSCHEMA 中创建表 TABLE1。该表有 2 列,即 ID 和 T_NAME,其中包含实体的 ID 号和名称。

询问:

CREATE TABLE OLDSCHEMA.TABLE1(
ID INT,
TNAME VARCHAR(10)
);

输出:

第 5 步:在模式 OLDSCHEMA 中创建表 TABLE2。该表有 2 列,即 ID 和 T_NAME,其中包含实体的 ID 号和名称。

询问:

CREATE TABLE OLDSCHEMA.TABLE2(
ID INT,
TNAME VARCHAR(10)
);

输出:

第 6 步:显示模式 OLDSCHEMA 中的所有表(或对象)。选择并显示表的模式名称(SCHEMA_NAME)、名称(TABLE_NAME)、创建日期(CREATE_DATE)和最后修改日期(MODIFY_DATE)。名为 T 的 SYS.TABLES 的别名用于缩短查询。

句法:

SELECT SCHEMA_NAME(T.SCHEMA_ID)
AS SCHEMA_NAME,
T.NAME AS TABLE_NAME, T.CREATE_DATE, 
T.MODIFY_DATE FROM SYS.TABLES T
WHERE SCHEMA_NAME(T.SCHEMA_ID)='SCHEMA_NAME' 
ORDER BY TABLE_NAME;

询问:

SELECT SCHEMA_NAME(T.SCHEMA_ID)
AS SCHEMA_NAME,
T.NAME AS TABLE_NAME, T.CREATE_DATE,
T.MODIFY_DATE FROM SYS.TABLES T
WHERE SCHEMA_NAME(T.SCHEMA_ID)='OLDSCHEMA'
ORDER BY TABLE_NAME;

注意:两个新创建的表 TABLE1 和 TABLE2 现在在 OLDSCHEMA 中可见。

输出:

第 7 步:创建一个名为 NEWSCHEMA 的模式。

询问:

CREATE SCHEMA NEWSCHEMA;

输出:

第 8 步:显示系统中所有当前存在的模式。

询问:

SELECT * FROM SYS.SCHEMAS;

注意:两种模式,即 OLDSCHEMA 和 NEWSCHEMA 现在应该在模式列表中可见。

输出:

第 9 步:由于在 SQL Server 中无法重命名模式,我们将旧模式的所有对象转移到新创建的模式并 DROP 旧模式。在这一步中,我们将 TABLE1 表从 OLDSCHEMA 转移到 NEWSCHEMA。

句法:

ALTER SCHEMA NEW_NAMED_SCHEMA
TRANSFER OLD_NAMED_SCHEMA.TABLE_NAME;

询问:

ALTER SCHEMA NEWSCHEMA
TRANSFER OLDSCHEMA.TABLE1;

输出:

第 10 步:在这一步中,我们将 TABLE2 表从 OLDSCHEMA 转移到 NEWSCHEMA。

询问:

ALTER SCHEMA NEWSCHEMA 
TRANSFER OLDSCHEMA.TABLE2;

输出:

第 11 步:显示架构 NEWSCHEMA 中的所有表(或对象)。选择并显示表的模式名称(SCHEMA_NAME)、名称(TABLE_NAME)、创建日期(CREATE_DATE)和最后修改日期(MODIFY_DATE)。名为 T 的 SYS.TABLES 的别名用于缩短查询。

询问:

SELECT SCHEMA_NAME(T.SCHEMA_ID) 
AS SCHEMA_NAME,
T.NAME AS TABLE_NAME, T.CREATE_DATE,
T.MODIFY_DATE FROM SYS.TABLES T
WHERE SCHEMA_NAME(T.SCHEMA_ID)='NEWSCHEMA' 
ORDER BY TABLE_NAME;

注意:从 OLDSCHEMA 传输的两个表 TABLE1 和 TABLE2 现在在 NEWSCHEMA 中可见。

输出:

第 12 步:既然我们已经成功地将两个表 TABLE1 和 TABLE2 转移到 NEWSCHEMA 中,我们不再需要 OLDSCHEMA。因此,我们使用 DROP 命令删除 OLDSCHEMA。

句法:

DROP SCHEMA SCHEMA_NAME;

询问:

DROP SCHEMA OLDSCHEMA;

输出:

第 13 步:显示系统中所有当前存在的模式。

询问:

SELECT * FROM SYS.SCHEMAS;

注意: OLDSCHEMA 现在不应该在模式列表中可见,但 NEWSCHEMA 必须可见。

输出: