Cursor apra Inserir Dados

46 views
Skip to first unread message

Igor Alves

unread,
Jul 26, 2013, 4:29:26 PM7/26/13
to sql-serv...@googlegroups.com
Tenho uma tabela onde um campo(cod_HistMovimento) é identity e preciso
inserir valores nesse campo.

Tentei fazer da seguinte forma, porém está apresentando erro do como
se o comando SET IDENTITY_INSERT HISTORICO_MOVIMENTO on e SET
IDENTITY_INSERT HISTORICO_MOVIMENTO off não estivessem corretos:
declare @cod_HistMovimento2 int
declare @num_Lote2 int
declare @dt_Movimento2 datetime


DECLARE HISTORICO_MOVIMENTO CURSOR FOR
SELECT
cod_HistMovimento
,[num_Lote]
,[dt_Movimento]

FROM BASE_MIGRA.dbo.HISTORICO_MOVIMENTO HM

OPEN HISTORICO_MOVIMENTO

FETCH NEXT FROM HISTORICO_MOVIMENTO INTO
@cod_HistMovimento2
,@num_Lote2
,@dt_Movimento2


WHILE @@FETCH_STATUS = 0
BEGIN
begin tran

SET IDENTITY_INSERT HISTORICO_MOVIMENTO on

INSERT INTO [HISTORICO_MOVIMENTO]
(cod_HistMovimento
,[num_Lote]
,[dt_Movimento]
)
VALUES(
@cod_HistMovimento2
,@num_Lote2
,@dt_Movimento2
);

SET IDENTITY_INSERT HISTORICO_MOVIMENTO off
commit

FETCH NEXT FROM HISTORICO_MOVIMENTO INTO
@cod_HistMovimento2
,@num_Lote2
,@dt_Movimento2

END


CLOSE HISTORICO_MOVIMENTO

DEALLOCATE HISTORICO_MOVIMENTO


Alguem tem alguma ideia que possa me auxiliar?

Igor Alves

Jefferson Montija Cirilo

unread,
Jul 26, 2013, 5:05:52 PM7/26/13
to sql-serv...@googlegroups.com
Boa tarde,

Não entendi o motivo de você usar CURSOR para esse insert. Por que você não
insere diretamente na tabela o resultado do select?

Insert into <tabela> <campos> select <campos> from <tabela>

Pode fazer isso dentro do bloco BEGIN TRAN / COMMIT / ROLLBACK

Qual o erro é retornado?

Atenciosamente,

Jefferson

-----Mensagem original-----
De: sql-serv...@googlegroups.com
[mailto:sql-serv...@googlegroups.com] Em nome de Igor Alves
Enviada em: sexta-feira, 26 de julho de 2013 17:29
Para: sql-serv...@googlegroups.com
Assunto: [SQL Server Brasil] Cursor apra Inserir Dados
--
--
----------------------
Você recebeu essa mensagem porque você esta inscrito no grupo "SQL Server
Brasil" do Google Groups.
Para postar nesse grupo, envie mensagem para
sql-serv...@googlegroups.com
Para sair desse grupo, envie mensagem para
sql-server-bra...@googlegroups.com
Para mais opções, visite a página desse grupo em
http://groups.google.com/group/sql-server-brasil
----------------------
You received this message because you are subscribed to the Google Groups
"SQL Server Brasil" group.
To post to this group, send email to sql-serv...@googlegroups.com
To unsubscribe from this group, send email to
sql-server-bra...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/sql-server-brasil
---
Você está recebendo esta mensagem porque se inscreveu no grupo "SQL Server
Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
um e-mail para sql-server-bra...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



Igor Alves

unread,
Jul 27, 2013, 7:48:58 AM7/27/13
to sql-serv...@googlegroups.com
Jefferson,

Primeiro obrigado pela disponibilidade de ajudar.

O erro é: ERROR [23000] [Microsoft][SQL Native Client][SQL Server]Não
é possível inserir um valor explícito para a coluna de identidade na
tabela Movimento' quando IDENTITY_INSERT está definido como OFF.

Não fiz o insert direto pois a tabela de origem tem 500 mil
registros,pois tentei fazer via cursor.
Igor Alves

Em 26 de julho de 2013 18:05, Jefferson Montija Cirilo
<jmci...@terra.com.br> escreveu:

Jefferson Montija Cirilo

unread,
Jul 27, 2013, 2:57:13 PM7/27/13
to sql-serv...@googlegroups.com
Boa tarde Igor,

Tente colocar o SET IDENTITY_INSERT ON antes do While e OFF depois do END.
Não entendi o motivo de não ter feito direto pelo SELECT... acho bem melhor,
mas é questão da sua escolha. Pode usar BEGIN TRAN / COMMIT / ROLLBACK.

Se for fazer isso uma única vez, pode usar também o Import/Export que é bem
rápido (sem contar que é uma operação minimamente logada).

Abraços

-----Mensagem original-----
De: sql-serv...@googlegroups.com
[mailto:sql-serv...@googlegroups.com] Em nome de Igor Alves
Enviada em: sábado, 27 de julho de 2013 08:49
Para: sql-serv...@googlegroups.com
Assunto: Re: [SQL Server Brasil] Cursor apra Inserir Dados

Igor Alves

unread,
Aug 2, 2013, 3:02:54 PM8/2/13
to sql-serv...@googlegroups.com
Obrigado Jefferson, da forma que você indicou funcionou.
Igor Alves
System Analyst / DBA - EBIX
Cientista da Computação pela Faculdade Ruy Barbosa - FRB
Especialista em Banco de Dados com Ênfase em Alta Disponibilidade - UNIFACS

Tel: (11) 95192-7114(TIM)
Linkedin:http://br.linkedin.com/in/igoralves


Em 27 de julho de 2013 15:57, Jefferson Montija Cirilo
Reply all
Reply to author
Forward
0 new messages