Você está na página 1de 2

DECLARE

@cursorObjetos CURSOR,
@nomeObjeto VARCHAR(1000),
@idObjeto INT,
@idPaiObjeto INT,
@idSchema INT,
@nivel INT,
@nomeSchemaOrigem VARCHAR(500),
@nomeSchemaDestino VARCHAR(500);
BEGIN
SET @nomeSchemaOrigem = 'GRANDESUL';
SET @nomeSchemaDestino = 'dbo';

SET @cursorObjetos = CURSOR FOR


with resultado(name, object_id, parent_object_id, idSchema, nivel) AS
(
SELECT
name, object_id, parent_object_id, SCHEMA_ID, 0 AS nivel
FROM
sys.objects obj
WHERE
parent_object_id = 0 AND
type <> 'S' AND
SCHEMA_ID = SCHEMA_ID(@nomeSchemaOrigem) AND
IS_MS_SHIPPED = 0
union all
SELECT
obj2.name, obj2.object_id, obj2.parent_object_id,
obj2.SCHEMA_ID, resultado.nivel + 1 AS nivel
FROM
sys.objects obj2,
resultado
WHERE
resultado.object_id = obj2.parent_object_id AND
SCHEMA_ID = SCHEMA_ID(@nomeSchemaOrigem) AND
IS_MS_SHIPPED = 0
)
select * FROM resultado ORDER BY nivel asc;

OPEN @cursorObjetos;

FETCH NEXT FROM @cursorObjetos INTO @nomeObjeto, @idObjeto, @idPaiObjeto,


@idSchema, @nivel;

DECLARE
@i INT,
@comando VARCHAR(2000);

SET @i = 1;
WHILE @@FETCH_STATUS = 0 AND @nivel = 0
BEGIN
DECLARE @EXISTE INT;

SELECT @EXISTE = COUNT(1) FROM sys.objects WHERE schema_id =


SCHEMA_ID(@nomeSchemaDestino) AND name = @nomeObjeto;

IF(@EXISTE > 0)
BEGIN
PRINT 'O objeto ' + @nomeObjeto + ' j� existe no schema ' +
@nomeSchemaDestino;
END
ELSE
BEGIN
SET @comando = 'ALTER SCHEMA ' + @nomeSchemaDestino + ' TRANSFER
' + SCHEMA_NAME(@idSchema) + '.' + @nomeObjeto;

EXEC(@comando);

--PRINT @comando;
END

FETCH NEXT FROM @cursorObjetos INTO @nomeObjeto, @idObjeto,


@idPaiObjeto, @idSchema, @nivel;
SET @i = @i + 1;
END

CLOSE @cursorObjetos;
DEALLOCATE @cursorObjetos;
END

Você também pode gostar