Remoção da property identity de um campo

1,531 views
Skip to first unread message

Administrador Grupo TSI_2004

unread,
Nov 19, 2010, 2:16:06 PM11/19/10
to sqlse...@googlegroups.com

Boa tarde pessoal, estou com um pequeno problema e não achei nenhuma solução viável,  tenho uma tabela que possui um campo identity e preciso preciso remover a property de identity desse campo, as unicas soluções para isso que achei foi desligando o identity com Set IDENTITY_INSERT TableName OFF (  que não resolve meu problema  )
ou criando novamente a tabela  e copiando os dados ( o que eu não achei muito viável)

alguem tem conhecimento de alguma forma de fazer isso via Linha de comando  ?

Agradeço a ajuda

Francisco Drumond

anderson figueiredo

unread,
Nov 19, 2010, 2:33:38 PM11/19/10
to sqlse...@googlegroups.com
bom, caso vc queira somente fazer a inserção de dados nessa tabela basta utilizar o exemplo a baixo:

SET IDENTITY_INSERT tabela on
insert into tabela
(campos)
values (1)
SET IDENTITY_INSERT tabela off


Agora caso você não queira que o campo seja mais identity, basta clicar com o botão direito sobre a tabela e clicar em modify, clicar no campo que quer remover o identity, encontrar a propriedade identity specification e colocar NO em (is identity).
--
Anderson Figueiredo
Analista/Programador
(61) 8418-5222

Administrador Grupo TSI_2004

unread,
Nov 19, 2010, 2:36:17 PM11/19/10
to sqlse...@googlegroups.com
Anderson a ideia é que o campo não seja mais identity, porem meu problema é que necessito fazer isso via linha de comando.
 
 
Att Francisco Drumond

Sérgio Sathler

unread,
Nov 19, 2010, 3:14:03 PM11/19/10
to sqlse...@googlegroups.com
Veja se isso te ajuda:

http://blog.sqlauthority.com/2009/05/03/sql-server-add-or-remove-identity-property-on-column/

2010/11/19 Administrador Grupo TSI_2004 <fsdru...@gmail.com>



--
Paz e bem!

Sérgio Sathler
(61) 9201-7104
blog: http://sergiosathler.blogspot.com
msn: sergio...@msn.com
skype: sergiosathler
g-talk: sathler.sergio
twitter.com/sergio_sathler
twitradio.com/sergio_sathler

Gustavo Maia

unread,
Nov 20, 2010, 8:34:09 AM11/20/10
to sqlse...@googlegroups.com
Bom Dia,
 
Infelizmente o Identity tem uma relação direta com as páginas de dados da tabela e não há outra forma de retirá-lo que não incorra em reconstruir a tabela (o que é exatamente o que a interface gráfica faz). O que é lamentável é que não exista um comando TSQL direto para isso. Um procedimento alternativo seria:
 
- Criar uma nova coluna
- Rodar um comando de update na nova coluna atualizando-o com o valor da coluna que tem o Identity
- Excluir a coluna que tem o Identity
- Renomear a nova coluna
 
Mesmo essa alternativa tem algumas desvantagens, pois, colunas Identity normalmente são chaves primárias e algumas vezes a ordem das colunas é relevante. Nesses cenários, essa implementação não é interessante. O mais utilizado é a interface de fato, pois, embora não seja um comando, oculta os detalhes.
 
[ ]s,
 
Gustavo

2010/11/19 Administrador Grupo TSI_2004 <fsdru...@gmail.com>
Anderson a ideia é que o campo não seja mais identity, porem meu problema é que necessito fazer isso via linha de comando.

anderson figueiredo

unread,
Nov 20, 2010, 8:46:37 AM11/20/10
to sqlse...@googlegroups.com
realmente, até agora a unica solução encontrada até agora foi essa que você disse.

Agora caso haja em outras tabelas fk com essa, teria que remover a ligação das fk`s com o campo e criar novamente a ligação.

alter table teste
add idnew int

go

update teste set idnew = id

go

alter table teste
drop column id

go

exec sp_rename 'teste.idnew', 'id', 'column'
Reply all
Reply to author
Forward
0 new messages