Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Difurlan

Saber qual é o próximo registro

Recommended Posts

Olá amigos!

 

Tenho uma tabela com esse formato:

 

---------------------

AgendaMovimentacao

---------------------

idLancamento (PK)

dataLancamento

dataVencimento

idConta

idPlanoContas

valor

descricao

qtdeMeses

status

freqLancamento

lancamentoFuturo

posicao

--------------------

 

 

Estou precisando de um script que me retorne o index que o idLancamento receberá no próximo registro adicionado na tabela.

 

Existe como???

Alguém poderia me ajudar, por favor?

Obrigado!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for autoincremento será o maior mais 1 ao menos que tenha excluido o ultimo em algum momento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Eriva_br,

 

eu li, mas não entendi muito bem.

 

Procurei a respeito do termo 'identity' e está relacionado a stored procedures...

 

Mas não sei como usá-las (SP's).

 

De qualquer forma, se alguém puder me auxiliar neste assunto, desde já agradeço a disposição!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Eriva_br,

 

eu li, mas não entendi muito bem.

 

Procurei a respeito do termo 'identity' e está relacionado a stored procedures...

 

Mas não sei como usá-las (SP's).

 

De qualquer forma, se alguém puder me auxiliar neste assunto, desde já agradeço a disposição!

veja o item A do exemplo, é criada a tabela com o campo id_num marcado como IDENTITY, ao fazer o comando insert não é enviado esse campo, ou seja, o sql server se vira pra popular esse campo...

 

cópia do exemplo do item A:

CREATE TABLE new_employees(id_num int IDENTITY(1,1),fname varchar (20),minit char(1),lname varchar(30))

INSERT new_employees(fname, minit, lname)
VALUES('Karin', 'F', 'Josephs')

INSERT new_employees(fname, minit, lname)
VALUES('Pirkko', 'O', 'Koskitalo')

select * from new_employeesCREATE TABLE new_employees(id_num int IDENTITY(1,1),fname varchar (20),minit char(1),lname varchar(30))

INSERT new_employees(fname, minit, lname)
VALUES('Karin', 'F', 'Josephs')

INSERT new_employees(fname, minit, lname)
VALUES('Pirkko', 'O', 'Koskitalo')
repare que o campo ID_NUM não é enviado nos comandos insert's, o sql server que vai inserir esse campo automaticamente, desse forma vai retornar:

 

select * from new_employees

id_num	  fname				minit lname						  
----------- -------------------- ----- ------------------------------ 
1		   Karin				F	 Josephs
2		   Pirkko			   O	 Koskitalo

(2 row(s) affected)

 

o incoveninente é que se deletar o registro 2 o próximo vai ser o 3... mas com o comando que o Junior enviou acima você evita isso e nem precisa usar o Identity.. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

agora você quem decide...

 

t++

Compartilhar este post


Link para o post
Compartilhar em outros sites

como disse so nao da certo se excluir o ultimo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigos,

 

Eriva,

 

entendi a funcionalidade da identity.

 

Só que o exemplo do Junior (caso eu esteja errado, por favor, me corrija) tem uma falha:

 

Imaginemos que meu último registro está gravado dessa forma:

(último lançamento)

---------------------

AgendaMovimentacao

---------------------

idLancamento (PK) = 1260

dataLancamento = ....

dataVencimento = ....

idConta = ....

idPlanoContas = ....

valor = ....

descricao = ....

qtdeMeses = ....

status = ....

freqLancamento = ....

lancamentoFuturo = ....

posicao = ....

--------------------

 

 

E então eu tenha deletado o último lançamento do banco.

Se eu deletei o 1260, então neste momento o max(idLancamento) seria o 1259.

Quando vou inserir um registro no banco, o max(idLancamento), que deveria ser 1260, na verdade será 1261.

 

Meu idLancamento está configurado dessa forma:

 

---------------------------------------------------------------------------

IdLancamento

---------------------------------------------------------------------------

Precision 18

Scale 0

Identity Yes (Not For Replication) ->> seria esse o problema? Se tirar o (Not For Replication) será que o codigo que o Junior me passou passa a funcionar 100%?

 

Identity Seed 1

Identity Increment 1

---------------------------------------------------------------------------

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linha de código que satisfaz a minha necessidade é a seguinte:

 

SELECT IDENT_CURRENT('AgendaMovimentacao') AS Expr1

 

Retornará o valor que o idLancamento irá receber para o próximo lançamento.

 

Obrigado à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Difurlan,

 

que bom que deu certo, junto com o IDENT_CURRENT, tem o @@identity, e SCOPE_IDENTITY

Todos eles te retornam um id, ai vai de acordo com sua necessidade

 

Abçs ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.