Stored Procedure para fazer migração de dados

Olá gujeiros, Boa tarde!

Tenho um servidor SQL SERVER 2005 que guarda 2 bancos.

Estou precisando fazer migrações dos dados de um banco para outro através de stored procedure.

Pego as informações de varias tabelas do banco X e devo passar para as tabelas o banco Y…
o único problema é que nunca fiz um stored procedure antes…

Agradeço qualquer ajuda!

É simples, como há a possibilidade de fazer referência de tabelas composta pelo nome do banco.nome da tabela, você conseguirá isso tranquilamente.

Usando o SQL Server Management Studio você cria a estrutura da stored procedure.
Provavelmente terá de usar algum recurso além da stored procedure, como cursor (para fazer o select e criar tabelas temporárias onde o mesmo irá “manter” os dados, até que o insert nas novas tabelas do outro banco seja realizado).

Acho que é isso mesmo a analista me falou sobre usar um cursor para armazenar o valor da consulta e depois pegas as informações dessa consulta
e fazer um insert no segundo banco…
Agora estou procurando pela net explicações sobre como montar uma stored procedure… primeira vez fazendo uma

Thanks :stuck_out_tongue:

Não me recordo bem, porém, acho que o próprio Management Studio já monta o esqueleto da SP.
Na net tem vários exemplos de procedure.
O que vai complicar (ao menos me complicava, no começo) é o cursor.
Vou ver se lembro e posto aqui.

Abraço.

Hihi… Brother estou concluindo aqui… qnd terminar posto para caso alguem precise =))

VLww

Ta awe galera para caso alguem precise

CREATE PROCEDURE [dbo].[sp_migration]
as 
DECLARE @solicitacaoid int
DEClARE @solcod char(6)
DECLARE @clicod char(6)
DECLARE @soldes varchar(100)
DECLARE @solobs varchar(600)
DECLARE @soldat datetime
DECLARE @solcat char(1)
DECLARE @solpri char(1)
DECLARE @solsta char(1)
DECLARE @sofcod char(2)
DECLARE @modid char(3)
DECLARE @verver char(11)
DECLARE @SOLICITACAO CURSOR 

SET @SOLICITACAO = CURSOR FAST_FORWARD 
FOR 
Select top 2 solcod, clicod, soldes, solobs, soldat, solcat, solpri, solsta, sofcod, modid, verver
From sysacme.dbo.solicitacao 

OPEN @SOLICITACAO 
FETCH NEXT FROM @SOLICITACAO 
INTO @solcod, @clicod, @soldes, @solobs, @soldat, @solcat, @solpri, @solsta, @sofcod, @modid, @verver

WHILE @@FETCH_STATUS = 0 
BEGIN 
	
	INSERT INTO SysProject.dbo.prj_solicitacao 
		( solcod, usr_codigo, clicod, soldescricao, solcomplemento, soldatacadastro, solcategoria, solprioridade, soltipo, sofcod, modid, solversaosoft)
		values
		( @solcod, 4 , @clicod, @soldes, @solobs, @soldat, @solcat, @solpri, @solsta, @sofcod, @modid, @verver)
	
	SET @solicitacaoid = (select top 1 solicitacaoid from SysProject.dbo.prj_solicitacao order by solicitacaoid desc)

	INSERT INTO SysProject.dbo.prj_sol_cliente
		( solicitacaoid, solicitante, emailsolicitante, fonesolicitante, clicod)
		values
		( @solicitacaoid, null, null, null, @clicod)

	INSERT INTO SysProject.dbo.prj_sol_encaminhamento
		( solicitacaoid, usr_codigo, tipoencaminhamento, dataencaminhamento, datasistema, descricao, usr_operador)
		values
		( @solicitacaoid, 4, 'N', GETDATE(), GETDATE(), 'Solicitação importada do SysacME', 4)
	
	INSERT INTO SysProject.dbo.prj_solicitacao_versao
		(solicitacaoid, sofcod, solversaosoft, clicod, solicitacaoversaoobservacao)
		values
		(@solicitacaoid, @sofcod, @verver, @clicod, 'Informação importada do milênio' )

	IF @solsta = 'a'
	set @solsta = 'L'
	ELSE IF @solsta = 't'
	set @solsta = 'H'
	ELSE IF @solsta = 'p'
	set @solsta = 'A'

	INSERT INTO SysProject.dbo.prj_solicitacao_status
		( solicitacaoid, statustipo, statusdata, statusfuncionario, statusdescricao)
		values
		( @solicitacaoid, @solsta, GETDATE(), 4, 'Solicitação importada do SysacME')

FETCH NEXT FROM @SOLICITACAO  
INTO @solcod, @clicod, @soldes, @solobs, @soldat, @solcat, @solpri, @solsta, @sofcod, @modid, @verver
END 

CLOSE @SOLICITACAO 
DEALLOCATE @SOLICITACAO

Se alguem achar um jeitinho melhor, uma refatoração agradeceria essa é minha primeira SP xD !

Abrass

Awe galera alguem sabe o que eu posso fazer para assegurar os INSERTS ?

Tipo caso algum dos insert quebrar ele da um rollback e todos os outros tb quebram… queria tipo fazer um commit para assegurar isso

Usa TRY CATCH.
Com BEGIN TRANS… e COMMIT TRANS…

Mas sem usar cursor, o database se cair nao vai ser usado o DEALLOCATE