Todos os objetos pertencentes a um
Schema herdam suas permissões (desde que não existam permissões explícitas para
cada objeto). Além disso, cada objeto pertence a um, e somente um, Schema.
Apesar do schema fazer parte da
identificação de todo objeto, o simples renomeio de uma tabela não
possibilita associá-la a outro Schema.
Para realizar esta tarefa, deve-se
utilizar a cláusula TRANSFER do comando ALTER SCHEMA.
Veja a sintaxe abaixo:
ALTER SCHEMA nome_do_schema TRANSFER
outro_schema.nome_da_tabela;
Note que o uso desta cláusula permite
que a tabela nome_data_tabela seja "importada" para
o Schema nome_do_schema.
No exemplo abaixo, 2 Schemas são
criados (Marketing e RecursosHumanos). Em seguida,
cria-se a a tabela Funcionario no Schema Marketing. Suponhamos
que esta seja uma associação equivocada, e que a tabela Funcionario deva
pertencer ao Schema RecursosHumanos.
-- Criando Schema para a área de Marketing
CREATE SCHEMA Marketing
GO
-- Criando Schema para a área de RecursosHumanos
CREATE SCHEMA RecursosHumanos
GO
-- Criando tabela Funcionario no Schema Marketing
CREATE TABLE Marketing.Funcionario
(
id int identity(1,1) PRIMARY KEY,
nome VARCHAR(100)
)
GO
/* Alterando o Schema da tabela Funcionario.
CREATE SCHEMA Marketing
GO
-- Criando Schema para a área de RecursosHumanos
CREATE SCHEMA RecursosHumanos
GO
-- Criando tabela Funcionario no Schema Marketing
CREATE TABLE Marketing.Funcionario
(
id int identity(1,1) PRIMARY KEY,
nome VARCHAR(100)
)
GO
/* Alterando o Schema da tabela Funcionario.
(DE: Marketing PARA: RecursosHumanos) */
ALTER SCHEMA RecursosHumanos TRANSFER Marketing.Funcionario
ALTER SCHEMA RecursosHumanos TRANSFER Marketing.Funcionario
GO
Observações:
· Tome cuidado ao alterar nomes ou schemas de objetos de um banco de
dados. Tenha sempre em mente que este objeto pode ser referenciado por
aplicações ou mesmo por outros objetos existente no banco de dados. Caso isso
aconteça, estas referências serão inválidas.