"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como incrementar automaticamente uma coluna sem identidade no SQL Server 2005 sem ORDER BY?

Como incrementar automaticamente uma coluna sem identidade no SQL Server 2005 sem ORDER BY?

Publicado em 23/12/2024
Navegar:370

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

Gerando IDs de incremento automático no SQL Server 2005 sem ORDER BY

A necessidade de inserir dados de uma tabela em outra durante o incremento automático uma coluna de não identidade pode ser um desafio. A abordagem padrão envolve o uso de um cursor ou a criação de uma variável de tabela, mas isso pode ser ineficiente.

Na ausência de um campo ORDER BY legítimo, a função ROW_NUMBER pode ser empregada. No entanto, a ausência de uma ordenação explícita não garante a preservação da ordem original dos dados. Isso ocorre porque "não solicitado" é diferente de "manter o pedido original". ) SELECIONAR Row_Number() ACIMA (ORDER BY (SELECIONE 1)) Coalescer ( (SELECIONE Max(ID) DE dbo.TargetTable COM (TABLOCKX, HOLDLOCK)), 0 ), CampoValor DE dbo.SourceTable WHERE {somecondition};

Essa abordagem calcula o Max ID e insere dados ao adquirir bloqueios para evitar erros de simultaneidade.

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
        Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3