Inquiridor
Próximo Indentity

Pergunta
-
Olá,
Eu tenho uma tabela chamada TesteTiago, com os campos id int identity, e campo char nome.
Quando faço insert normalmente, o id vai ser gerado automaticamente pelo identity (número 1). Ótimo!
Eu queria pegar o próximo identity sem fazer esse insert (número 2), criando um "buraco" na tabela TesteTiago.
Conseguiram entender o que eu quero?
Todas as Respostas
-
Tiago, boa tarde!
Meu caro acho que entendi sim o que você quer, você deseja antes de inserir o dado na tabela saber qual o próximo ID. Para isso faça o seguinte:
CREATE TABLE tempdb.dbo.DadosSQL ( ID INT IDENTITY NOT NULL, Nome VARCHAR(100) ) INSERT INTO tempdb.dbo.DadosSQL (Nome) VALUES ('Luan Moreno M. Maciel') SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID
Escrevi sobre isso no meu blog, segue -
http://luanmorenodba.wordpress.com/2012/02/08/identity-scope_identity-e-ident_currentdiferenas/
Abs e se útil positive e resposta!
Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008
- Editado Luan.Moreno A.k.a SQL.SoulMVP terça-feira, 27 de março de 2012 19:23 alter
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 28 de março de 2012 16:17
-
Mas se eu fizer um insert depois do
SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID
vai inserir o id desse select. A partir do momento que eu faço esse select assim, teria que incrementar automaticamente o identity para que o próximo insert já usar o novo número.
-
Tiago, boa tarde!
Mais se você já tem uma coluna auto incremento para que você deseja inserir um novo ID? A opção identity server justamente para o controle de geração dos números, e por padrão não é possível você realizar a inserção de valores em uma coluna identity.
Se desejar inserir manualmente valores dentro da coluna Identity, você precisa habilitar a seguinte opção.
SET IDENTITY_INSERT NomeTabela ON
Abs
Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008
-
Mas eu não quero inserir novos valores, quero somente o próximo número sem necessidade de fazer insert e incrementar automaticamente a identity.
Por exemplo, no oracle eu posso usar a sequence para pegar o próximo número, como faria no sql server?
-
Tiago, boa tarde!
O identity não possibilita esse tipo de opção que você deseja. Não há como você saber o próximo valor da tabela, somente se você realizar
SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID
Assim você saberá provavelmente qual o próximo valor.
O sequence é uma estrutura diferente do identity, o sequence é um objeto do banco de dados enquanto o identity é uma opção de tabela, por isso o funcionamento interno deles são diferentes, porém no SQL Server 2012 temos essa nova feature implementada.
Abs
Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 28 de março de 2012 16:17