Como título, tenho uma tabela existente que já está preenchida com 150000 registros. Eu adicionei uma coluna de identificação (que atualmente é nula).
Suponho que posso executar uma consulta para preencher esta coluna com números incrementais e, em seguida, definir como chave primária e ativar o incremento automático. Essa é a maneira correta de prosseguir? E se sim, como preencho os números iniciais?
sql-server
sql-server-2008
primary-key
alter-table
fearofawhackplanet
fonte
fonte
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
mas não queria experimentá-lo sem verificar com um especialista :) pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
que implica queNOT NULL
está no lugar - então novamente - não é absolutamente necessário. Mas eu prefiro ser explícito e então eu sempre tenho oNOT NULL
lá, apenas para ser absolutamente claroPRIMARY KEY
, o índice agrupado é criado automaticamente para você (a menos que você especifique explicitamenteNONCLUSTERED
)Você não pode "ativar" a IDENTIDADE: é uma reconstrução da tabela.
Se você não se importa com a ordem dos números, adicione a coluna NOT NULL, com IDENTITY de uma só vez. 150 mil linhas não são muito.
Se você precisar preservar alguma ordem numérica, adicione os números de acordo. Em seguida, use o designer da tabela SSMS para definir a propriedade IDENTITY. Isso permite que você gere um script que fará com que a coluna solte / adicione / mantenha números / faça novas propagandas para você.
fonte
ALTER TABLE ... SWITCH
possível fazer isso sem isso.Eu tive esse problema, mas não consegui usar uma coluna de identidade (por vários motivos). Eu decidi sobre isso:
Emprestado daqui .
fonte
Se a coluna já existir na sua tabela e for nula, você poderá atualizar a coluna com este comando (substitua id, tablename e tablekey):
fonte
Quando adicionamos uma coluna de identidade a uma tabela existente, ela será preenchida automaticamente, sem a necessidade de preenchê-la manualmente.
fonte
pelo designer, você pode definir a identidade (1,1) clique com o botão direito do mouse em tbl => desing => na parte esquerda (clique com o botão direito) => properties => nas colunas de identidade, selecione #column
Propriedades
coluna idendtity
fonte
Se sua tabela tiver relacionamento com outras tabelas usando sua chave primária ou estrangeira, talvez seja impossível alterar sua tabela. então você precisa soltar e criar a tabela novamente.
Para resolver esses problemas, você precisa gerar scripts clicando com o botão direito do mouse no banco de dados e, no conjunto de opções avançadas, digite o tipo de dados para script para esquema e dados. depois disso, use esse script com a alteração de sua coluna para identificar e gerar novamente a tabela usando sua consulta.
sua consulta será como aqui:
fonte
Aqui está uma ideia que você pode tentar. Tabela original - sem coluna de identidade table1 cria uma nova tabela - chame table2 junto com a coluna de identidade. copie os dados da tabela1 para a tabela2 - a coluna de identidade é preenchida automaticamente com números incrementados automaticamente.
renomeie a tabela original - tabela1 para tabela3 renomeie a nova tabela - tabela2 para tabela1 (tabela original) Agora você tem a tabela1 com a coluna identidade incluída e preenchida para os dados existentes. Depois de verificar se não há problema e funcionando corretamente, descarte a tabela3 quando não for mais necessário.
fonte
Crie uma nova tabela com nome diferente e as mesmas colunas, associação de chave primária e chave estrangeira e vincule-a na sua instrução de código Inserir. Por exemplo: Para EMPREGADO, substitua por EMPREGADOS.
No entanto, você deve excluir a tabela EMPLOYEE existente ou fazer alguns ajustes de acordo com sua necessidade.
fonte
Esta resposta é uma pequena adição à resposta mais votada e funciona para o SQL Server. A pergunta solicitou uma chave primária de incremento automático, a resposta atual adiciona a chave primária, mas não é sinalizada como incremento automático. O script abaixo verifica as colunas, a existência e adiciona-o com o sinalizador de incremento automático ativado.
fonte
fonte
alter table / ** cole o nome da tabalha ** / add id int IDENTITY (1,1)
exclua de / ** cole o nome da tabala ** / where id in
(
selecione a.id FROM / ** cole o nome da tabala / como uma junção externa esquerda (SELECT MIN (id) como id FROM / cole o nome da tabala / GROUP BY / cole as colunas c1, c2 .... ** /
ONDE t1.id É NULL
)
alterar tabela / ** colar o nome da tabalha ** / DROP COLUMN id
fonte
Tente algo assim (em uma tabela de teste primeiro):
Eu não testei isso, então tenha cuidado!
fonte
IDENTITY
colunas) e não funcionaria de qualquer maneira.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
você não pode simplesmente jogarMAX
lá. Onde está umaWHERE
cláusula para evitar apenas atualizar repetidamente a mesma linha?Isso funciona no MariaDB, então só espero que funcione no SQL Server: solte a coluna de ID que você acabou de inserir e use a seguinte sintaxe: -
ALTER TABLE nome_tabela ADICIONAR ID INT PRIMARY KEY AUTO_INCREMENT;
Não há necessidade de outra mesa. Isso simplesmente insere uma coluna de identificação, torna o índice primário e o preenche com valores sequenciais. Se o SQL Server não fizer isso, peço desculpas por desperdiçar seu tempo.
fonte
ALTER TABLE nome_da_tabela ADICIONAR ID DE COLUNA INT NÃO NULL PRIMARY KEY AUTO_INCREMENT; Isso pode ser útil
fonte