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};
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