como incrementar o valor de colunas inteiras em 1 no SQL

94

Minhas perguntas são

como incrementar o valor de uma coluna em 1.

Por exemplo, suponha que uma coluna IDtenha valores 1,2,3,4, ..

Agora, quando eu atualizo esta tabela, a IDcoluna deve aumentar em 1,

Agora IDse tornará 2,3,4,5, ..

Varinder
fonte
alguma amostra sobre você quer? incrementar o valor da coluna em 1 para 1 linha? todas as linhas? qual é a sua mesa (DDL)? amostras de dados (DML)?
Kiquenet

Respostas:

159

Para adicionar um a cada valor na tabela ...

UPDATE myTable
SET ID = ID + 1

Para criar um novo valor, mais um do que o anterior mais alto (normalmente), use uma coluna com IDENTITY

gbn
fonte
39
Observe que isso não funciona quando a coluna é NULL. Colunas NULL permanecem NULL, mesmo após o incremento. Para que isso seja resolvido, use a ISNULLdeclaração como esta: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Retirado desta resposta do SO )
Uwe Keim
SET [Lic] = [Lic] + @dif. Observe que a variável @dif pode ser positiva, 0 ou negativa
Kiquenet de
43

Se você quiser ter um número único para cada linha gerada automaticamente, essa é a IDENTIDADE de acordo com a resposta de Neil.

Se cada vez que você atualizar a tabela quiser aumentar os valores (ou seja, eles não são chaves):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>
Kaj
fonte
8

Experimente isto:

Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
kishor soneji
fonte
1

Você pode usar o IDENTITYque fará isso por você.

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

Ao inserir seu primeiro registro, você obterá um Idde 1.

Neil Knight
fonte
1

No Oracle, o código é um pouco mais complicado.

Você terá que criar um campo de incremento automático com o objeto de sequência (este objeto gera uma sequência numérica).

Use a seguinte sintaxe CREATE SEQUENCE:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

O código acima cria um objeto de sequência chamado seq_person, que começa com 1 e aumentará em 1. Ele também armazenará em cache até 10 valores para desempenho. A opção de cache especifica quantos valores de sequência serão armazenados na memória para acesso mais rápido.

Para inserir um novo registro na tabela "Pessoas", teremos que usar a função nextval (esta função recupera o próximo valor da sequência seq_person):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

A instrução SQL acima iria inserir um novo registro na tabela "Pessoas". A coluna "ID" seria atribuída ao próximo número da sequência seq_person. A coluna "FirstName" seria definida como "Lars" e a coluna "LastName" seria definida como "Monsen".

Piyushj
fonte
1

Você pode tentar o seguinte:

DECLARE @i INT
SET @i = @@ROWCOUNT + 1

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Tony Gallone
fonte