ID do artigo: 273586 - Última revisão: sexta-feira, 2 de novembro de 2007 - Revisão: 4.2 O comportamento da função IDENTITY quando usada com SELECT INTO ou INSERT Consultas SELECT que contêm uma cláusula ORDER BY
Nesta páginaSumárioQuando você usa uma consulta SELECT INTO com a função IDENTITY e uma cláusula ORDER BY, os valores de identidade que são gerados não são garantidos que a mesma ordem como ordem em que é fornecido pela cláusula ORDER BY. Por exemplo, se a função IDENTITY começar com uma semente de 1 e um incremento de 1, a primeira linha no conjunto de resultados ordenado pode ter um valor diferente de 1 e a segunda linha pode ter um valor diferente de 2 e para que forth.While a ordenação pode aparecer como esperado, o comportamento não é garantido. A presença de TOP ou SET ROWCOUNT também não garante a ordem das linhas. Se você desejar que os valores IDENTITY para ser atribuído de maneira seqüencial que segue a ordem na cláusula ORDER BY, crie uma tabela que contém uma coluna com a propriedade IDENTITY e, em seguida, executar um INSERT SELECT ? ORDER BY consulta para preencher essa tabela. Mais InformaçõesOs valores de identidade que são gerados dependem a posição da função GetIdentity() na árvore de consulta (showplan), que pode alterar devido a alterações otimizador, planos de consulta paralela ou a presença de TOP/SET ROWCOUNT. Enquanto você pode ver cenários em que um SELECT INTO com uma função IDENTITY e uma cláusula ORDER BY produzir valores em uma ordem que você desejar que esse comportamento não é garantida e podem ser alteradas sem aviso. Os cenários a seguir envolvem uma instrução SELECT INTO e uma função IDENTITY . Considere uma tabela é denominada OldTable com os seguintes valores. Col1 Col2 ------- -------- 1 A 11 F 7 G 17 I 2 Z Cenário 1Nesse cenário, a consulta SELECT INTO usa uma função IDENTITY e uma ORDER BY cláusula.Método 1Col1 Col2 ID ------- -------- -------- 1 A 4 2 Z 2 7 G 5 11 F 3 17 I 1 Método 2Col1 Col2 ID ------- -------- ------- 1 A 1 2 Z 2 7 G 3 11 F 4 17 I 5 Cenário 2As seguintes consultas SELECT INTO usar a função IDENTITY e uma cláusula ORDER BY, com um operador TOP ou uma instrução SET ROWCOUNT.Método 1Col1 Col2 ID ----- ----- ----- 1 A 2 2 Z 1 7 G 3 Método 2Col1 Col2 ID ------ ------ ------ 1 A 1 2 Z 2 7 G 3 Método 3Col1 Col2 ID ------ ------ ------ 1 A 4 2 Z 2 7 G 5 Na verdade, a função IDENTITY gera valores de identidade corretamente com base em parâmetros SEED e INCREMENT. No entanto, a geração de valor de identidade ocorre antes das linhas são classificadas com base na cláusula ORDER BY. Portanto, quando você usar um operador TOP ou um ROWCOUNT SET declaração, as linhas inseridas na tabela resultante ( NovaTabela ) parecem ter valores de identidade incorreta. Os valores de identidade do que SQL Server gera podem não corresponder aos parâmetros INCREMENT e SEED da função IDENTITY . Aqui está um exemplo que envolve um INSERT INTO SELECT FROM com cláusula ORDER BY. Considere uma tabela que é chamada OldTable com os seguintes valores: Col1 Col2 ------- -------- 1 S 11 F 7 G 17 I 2 z Abaixo é a tabela de destino chamada NovaTabela (ID é uma coluna de identidade) ID (identity) Col1 Col2 --------------- ------- ------ A seguinte consulta INSERT INTO SELECT FROM com uma cláusula ORDER BY garante essa coluna que ID no NovaTabela está na mesma ordem que Col1 . ID (identity) Col1 Col2 ------------- ------ ------ 1 1 S 2 2 z 3 7 G 4 11 F 5 17 I Observação Coluna de identidade de identificação é gerada para ter a mesma ordem de Col1 . No entanto, INSERT INTO doesn?t garante a ordem física de identificação ou Col1 em NovaTabela . Para recuperar os dados na ordem desejada, uma cláusula ORDER BY é necessária, conforme mostrado pelo seguinte instrução SELECT: A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 273586
(http://support.microsoft.com/kb/273586/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções deste artigo
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início