Ir para conteúdo

Arquivado

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

Miguel

Auto Numeração no SQL Server

Recommended Posts

Ola Miguel,Para criar um autoincremento você precisa na declaração da tabela você informa q o campo sera um comando IDENTITY( Inicial, Incremento ).Ex.:CREATE TABLE cliente( codigo INTEGER IDENTITY( 1, 1 ) NOT NULL, nome varchar(80),.... )ou você mesmo pode controlar esse incremento, criando uma tabela onde você guarda o ultimo numero incluido e com um PROCEDURE você controla.Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando,Muito obrigado pela ajuda, era isso que eu precisava. Porém surgiu uma outra dúvida.Provavelmente é possível eu fazer isso criando um Trigger certo? Eu imagino que para isso tenho que identificar o último número gerado e adicionar 1 ao próximo registro correto? (é claro que no meio desse código deverá ter uma condição que verificar se a tabela está vazia, etc...!)Enfim, a questão é: como faço para perguntar e/ou direcionar, em um Trigger, o ponteiro para o último registro, para que dessa forma possa ser acrescentado + 1?Mais uma vez obrigado pela ajudaValeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,Só complementando...! A solução do Fernando me atende, porém ainda preciso tentar uma forma de acrescentar o número mantendo a sequência (1 2 3 ...).Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando adicionar a auto numeração em um campo de uma tabela.já tentei:ALTER TABLE intranet.arq_historico modify codhistorico not null identity (1,1)mas dá a seguinte mensagem de erro:Server: Msg 170, Level 15, State 1, Line 2Line 2: Incorrect syntax near 'codhistorico'.já tentei:ALTER TABLE arq_historicoALTER COLUMN codhistorico int NOT NULL IDENTITY(1,1)e também dá erro:Server: Msg 156, Level 15, State 1, Line 2Incorrect syntax near the keyword 'IDENTITY'.Qual é a sintaxe correta??Esse campo (codhistorico) é chave primária, se eu der um alter table como os mostrados acima a minha chave primária é desabilitada ou continua de jeito que está e só altera o que eu especificar no alter table???

Compartilhar este post


Link para o post
Compartilhar em outros sites

desconheco esse comando no alter table.pelo menos no create table, o identity vem antes do not null.Tente assim:ALTER TABLE arq_historicoALTER COLUMN codhistorico int IDENTITY(1,1) NOT NULL se não der certo, post de novo aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desconheco esse comando no alter table.pelo menos no create table, o identity vem antes do not null.Tente assim:ALTER TABLE arq_historicoALTER COLUMN codhistorico int IDENTITY(1,1) NOT NULL se não der certo, post de novo aí.

Também não deu certo:Server: Msg 156, Level 15, State 1, Line 2Incorrect syntax near the keyword 'IDENTITY'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

Esse campo é sua PK?

você tem outros campos nessa tabela que já possuem o parâmetro IDENTITY ??

 

DEUS lhe abençõe!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faço para criar uma sequencia como 0001,0002,0003,0004, e assim por diante?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é a forma mais fácil de se trabalhar?

 

Se eu poder deixar a chave primária como está e ao exibir estiver com a segquencia, seria bom.

E se eu criar uma outra coluna chamada NumeroCartao para armazenar apenas essa sequencia?

 

Muito obrigado pela ajuda,

 

Pedro.

 

Qual é a forma mais fácil de se trabalhar?

 

Se eu poder deixar a chave primária como está e ao exibir estiver com a segquencia, seria bom.

E se eu criar uma outra coluna chamada NumeroCartao para armazenar apenas essa sequencia?

 

Muito obrigado pela ajuda,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pedro, varia muito da sua aplicacao e do modo que pretente visualizar os dados do modo que precisa.

 

O ideal seria deixar a chave como esta e nao criar uma coluna para inserir estes dados. Mexer na estrutura para visualizar somente um campo a meu nao ver nao eh legal.

 

Para exibicao dos dados do jeito que quer, de uma ollhada nos comandos: substring, len

 

Estou sem ambiente de teste para fazer o select para você, mas estes comandos jah vai te ajudar.

 

abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

jus2ka,

 

muito obrigado pela ajuda. O meu sistema faz o controle de cartões, essa sequencia á justamente para gerar os números iniciais.

Eu não consegui gerar nada com seu exemplo.

 

Abs,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pedro,

 

Infelizmente, excetuando-se a interface visual, não há nada muito fácil para fazer quando já existe a tabela e temos que criar uma coluna com Identity. :wacko:

 

-- Vamos considerar que a sua tabela é a seguinte:

 

create table teste

(tes_in_codigo int,

tes_st_nome varchar(50)

)

 

--E que ela já possui alguns dados:

 

insert into teste values (5,'Exemplo SQL Server');

insert into teste values (44,'Bem que o Identity poderia ser mais fácil');

 

--O processo de criação é meio chatinho. Mas vamos lá!

 

--1. Efetue um Select MAX() na sua tabela atual para ver qual será o número que deverá iniciar o identity.

 

SELECT MAX(tes_in_codigo)+1 from teste

 

--2. Crie uma nova tabela com um nome temporário, utilizando o Identity

 

create table teste_temp

(tes_in_codigo int IDENTITY (45,1) NOT NULL PRIMARY KEY, --Observe que o 1o parametro do Identity, é a "semente"

tes_st_nome varchar(50) --ou número inicial. Eu coloquei o resultado do Select.

)

 

--3. Copie os dados da tabela corrente para a nova tabela. Certifique-se de habilitar a propriedade Identity Insert

-- Assim, você poderá utilizar os números originais da tabela. Não esqueça de desligar essa opção quando finalizar!

 

SET IDENTITY_INSERT teste_temp ON

 

INSERT INTO teste_temp (tes_in_codigo, tes_st_nome) SELECT tes_in_codigo, tes_st_nome FROM teste

 

SET IDENTITY_INSERT teste_temp OFF

 

--4. Rode o comando DBCC para resetar o identificador da tabela, ou ainda, você pode "forçar" com o número obtido no Select Max

 

DBCC CHECKIDENT (teste_temp, RESEED, 45)

 

--5. Rode um select na tabela teste_temp para verificar se está tudo ok.

 

select * from teste_temp

 

--6. Se estiver, apague a tabela original.

DROP TABLE teste

 

--7. Renomeie a tabela teste_temp para teste

EXEC sp_rename 'teste_temp', 'teste'

 

--8. Verifique como ficou a nova tabela, efetuando um insert.

insert into teste values ('Será que funcionou?')

SELECT * from teste

--Boa Sorte! http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

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.