Quero adicionar uma coluna a um banco de dados legado existente e escrever um procedimento pelo qual eu possa atribuir a cada registro um valor diferente. Algo como adicionar uma coluna e gerar automaticamente os dados para ela.
Por exemplo, se eu adicionar uma nova coluna chamada "ID" (número), desejo inicializar um valor exclusivo para cada um dos registros. Portanto, minha coluna de ID terá registros de digamos 1 to 1000
.
Como faço isso?
sql
sql-server
Adhip Gupta
fonte
fonte
Respostas:
Isso dependerá do banco de dados, mas para o SQL Server, isso pode ser alcançado da seguinte maneira:
fonte
Prevent saving changes that require table re-creation
desmarcar essa caixa e poderá adicionar uma coluna de identidade, mesmo usando o gui.Ajudaria se você publicasse qual banco de dados SQL você está usando. Para o MySQL, você provavelmente deseja auto_increment:
Não tenho certeza se isso aplica os valores retroativamente. Caso contrário, você deve ser capaz de iterar seus valores com um procedimento armazenado ou em um programa simples (desde que ninguém mais esteja gravando no banco de dados) e defina use a
LAST_INSERT_ID()
função para gerar o valor do ID.fonte
para Oracle você poderia fazer algo como abaixo
fonte
E o equivalente ao Postgres (a segunda linha é obrigatória apenas se você quiser que "id" seja uma chave):
fonte
Apenas usando um ALTER TABLE deve funcionar. Adicione a coluna com o tipo apropriado e um sinalizador de IDENTIDADE, e isso deve fazer o truque
Confira este artigo da MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx na sintaxe ALTER TABLE
fonte
para tipo de dados UNIQUEIDENTIFIER no servidor sql, tente isso
Se você deseja criar uma chave primária a partir dessa coluna, use este
fonte
Depende do banco de dados, pois cada banco de dados possui uma maneira diferente de adicionar números de sequência. Eu alteraria a tabela para adicionar a coluna e, em seguida, escreveria um script db em groovy / python / etc para ler os dados e atualizar o ID com uma sequência. Uma vez que os dados foram definidos, eu adicionaria uma sequência à tabela que inicia após o número superior. Depois que os dados forem definidos, defina as chaves primárias corretamente.
fonte
Se você não deseja que sua nova coluna seja do tipo
IDENTITY
(incremento automático) ou deseja ser específico sobre a ordem em que suas linhas são numeradas, você pode adicionar uma coluna do tipoINT NULL
e preenchê-la dessa maneira. No meu exemplo, a nova coluna é chamada MyNewColumn e a coluna de chave primária existente para a tabela é chamada MyPrimaryKey.Isso funciona no SQL Sever 2005 e posterior, ou seja, versões que suportam
ROW_NUMBER()
fonte