Artigo: 273586 - Última revisão: sexta-feira, 2 de Novembro de 2007 - Revisão: 4.2 O comportamento da função IDENTITY quando utilizado com SELECT INTO ou INSERT SELECT consultas que contêm uma cláusula ORDER BY
Nesta páginaSumárioQuando utiliza 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 para que a mesma ordem que a ordem pela qual é fornecido pela cláusula ORDER BY. Por exemplo, se a função IDENTITY começar com uma base de 1 e um incremento de 1, a primeira linha no conjunto de resultados ordenada 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 poderá aparecer como previsto, o comportamento não está assegurado. A presença de TOP ou SET ROWCOUNT também não garante a ordem das linhas. Se pretender que os valores IDENTITY devem ser atribuídos de forma sequencial que se segue a ordenação na cláusula ORDER BY, criar uma tabela que contém uma coluna com a propriedade IDENTITY e em seguida, execute um INSERT SELECT ? ORDER BY consulta para preencher esta tabela. Mais InformaçãoOs valores de identidade que são gerados dependem a posição da função GetIdentity() na árvore da consulta (showplan), que pode alterar devido a alterações de optimização, planos de consulta paralela ou a presença de TOP/SET ROWCOUNT. Enquanto poderá ver cenários em que um SELECT INTO com uma função IDENTITY e uma cláusula ORDER BY produzir valores de uma encomenda que pretendam este comportamento não é garantida e poderá ser alterado sem aviso prévio. Os seguintes cenários 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 1Neste cenário, a consulta SELECT INTO utiliza uma função IDENTITY e um 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 consultas seguintes SELECT INTO utilizam 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 realidade, a função IDENTITY gera identidade valores correctamente com base nos parâmetros de base e INCREMENTO. No entanto, a geração de valor de identidade ocorre antes das linhas são ordenadas com base na cláusula ORDER BY. Por conseguinte, quando utiliza um operador TOP ou um ROWCOUNT SET instrução, linhas inseridas na tabela resultante ( novatabela ) parecem ter valores de identidade incorrecto. Os valores de identidade que do SQL Server gera podem não corresponder aos parâmetros base e INCREMENTO da função IDENTITY . Eis um exemplo que envolve um INSERT INTO SELECT FROM com cláusula ORDER BY. Considere uma tabela denominada OldTable com os seguintes valores: Col1 Col2 ------- -------- 1 S 11 F 7 G 17 I 2 z Abaixo da tabela de destino chama novatabela (ID é uma coluna de identificação) ID (identity) Col1 Col2 --------------- ------- ------ A consulta seguinte INSERT INTO SELECT FROM com uma cláusula ORDER BY irá garante a coluna que ID no novatabela está a ser a mesma ordem que Col1 . ID (identity) Col1 Col2 ------------- ------ ------ 1 1 S 2 2 z 3 7 G 4 11 F 5 17 I Nota Coluna de identidade de ID é gerada para que a mesma ordem de Col1 . No entanto, INSERT INTO doesn?t garante a ordem física dos ID ou Col1 em novatabela . Para obter os dados na ordem pretendida, uma cláusula ORDER BY é necessária tal como mostrado, seguindo a 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos
|






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


Voltar ao topo