如何重命名 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 必须可见。
输出: