Respostas:
Mesmo que eu ache que você já tenha criado a coluna, nesta resposta, suponho que a coluna ainda não exista. Na IMO, uma coluna obrigatória exclusiva nunca deve ser adicionada sem planejar como preencher as linhas existentes primeiro. Portanto, fornecerei os métodos para fazer isso a partir do zero.
Como você faz isso depende do que está envolvido no preenchimento dos valores.
Após o método usado, adicione uma restrição exclusiva na coluna para garantir a integridade dos dados. Para os métodos 1 e 2, isso pode ser feito na instrução única ou em uma transação do usuário (não mostrada) e deve ser feito na transação do usuário no método 3.
Provavelmente existem algumas outras maneiras obscuras de fazer isso, mas acho que abordamos as mais comuns.
Método 1: Adicionar uma coluna IDENTITY
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
Isso preencherá todas as linhas da tabela com valores inteiros começando com o valor inicial (1), aumentando o valor de incremento (2) para cada linha. Acredito que a ordem em que os valores são preenchidos é indefinida (se você precisar especificar uma ordem, use o Método 3).
Método 2: preencher usando uma restrição padrão
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
Isso fará três coisas atomicamente: 1. Adicione uma coluna que não permita NULLvalores; 2. Crie uma restrição padrão para a coluna; 3. Preencha cada linha da tabela usando a restrição padrão.
Embora este exemplo use uma uniqueidentifiercoluna, ele também funciona com qualquer tipo de dados e restrição padrão.
Método 3: preencher usando uma instrução UPDATE
Esse caso ocorreria quando, por exemplo, havia um valor de outra parte do seu aplicativo que precisava ser adicionado à tabela ou você precisava especificar uma ordem exata para os valores exclusivos.
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
Método 4: preencher usando um objeto SEQUENCE
Para o SQL Server 2012, você pode preencher uma coluna usando os valores gerados por um SEQUENCEobjeto - ainda não trabalhei com isso, por isso vou me referir a um artigo do MSDN para obter detalhes.
update mytable set mycolumn = next value for mysequence where mycolumn is null;
Se você estiver satisfeito com um número começando de 1, poderá usá-lo row_number().
update T
set cn = rn
from (
select cn,
row_number() over(order by (select 1)) as rn
from TableX
) T
A seguinte coluna de atualizações 'cn' com o número de sequência iniciando em 1
DECLARE @id INT
SET @id = 0
UPDATE X
SET @id = cn = @id + 1
GO
tente fazer isso para atualizar usando uma sequência ... Você deve executar o TOP devido à cláusula order by na instrução update. Eu usei essa declaração no SQL SERVER 2012
update invoice set RecNo = (next value for seq_invoice_recno)
where invoiceid in (select top 100000 invoiceid from invoice where RecNo is null
order by invoiceId)
E se tudo isso ainda não funcionar (talvez porque seja o SQL-92 antigo), você pode dividir isso em várias etapas, conforme sugerido por Ziggy Crueltyfree Zeitgeister, aqui .
CREATE TABLE sorting (sid numeric(10,10), rn int);
INSERT INTO sorting (sid, rn)
SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210
ORDER BY SortID;
UPDATE Beleg SET SortID = (SELECT rn FROM sorting WHERE sid=Beleg.SortID)
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210;
DROP TABLE sorting;
RecordNumber? Parece uma função / recurso proprietário do Filemaker. Não se aplica ao SQL Server e não no padrão SQL 92.
Filemakerentão não acho que a resposta seja relevante. Você pode usar uma tabela temporária e preencher essa coluna com a ROW_NUMBER()função.