Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 11405|Resposta: 0

[Gorjetas] sql recebe o valor primário da chave após esperar por INSERT

[Copiar link]
Publicado em 05/05/2015 17:35:51 | | |

Função de busca de valores de identificação no SQL SERVER 2000     
  No SQL Server 2000, a coluna identidade é definida por IDENTITY, e o seguinte está relacionado à obtenção do valor identidade do último registro inserido   
   
  Uma ilustração de exemplo da função de desligado     
   
          No SQL Server, você pode usar SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() para obter o valor do último registro inserido, e a diferença entre eles é:   
  SCOPE_IDENTITY() retorna o último valor IDENTITY inserido dentro da coluna IDENTITY no mesmo escopo. Um escopo é um módulo – procedimentos armazenados, gatilhos, funções   
   
  Números ou lotes. Portanto, se duas instruções estão no mesmo procedimento armazenado, função ou lote, elas estão no mesmo escopo.   
  @@IDENTITY Retorna o último valor de identificação gerado em todas as tabelas da sessão atual   
  IDENT_CURRENT() retorna o último valor de identificação gerado para a tabela especificada em qualquer sessão e qualquer escopo   
  Aqui está um exemplo para ilustrar as diferenças entre eles     
   
  -- a) Código de exemplo     
  --   ===========================================   
  -- Criar uma tabela de teste   
  --   ===========================================   
  USE tempdb   
  VAI   
   
  CRIAR TABELA T1(id int IDENTIDADE, col int)   
  INSERIR T1 SELECT 1   
  UNIÃO TODOS SELECIONAM 2   
  CRIAR TABELA T2(id int IDENTIDADE, col int)   
  VAI   
   
  CRIAR TR_insert_t2 TRIGGER NO T2   
  PARA INSERT   
  COMO   
          INSERIR T1 SELECT 3   
  VAI     
   
  --   ===========================================   
  -- Testar três funções: 1   
  --   ===========================================   
  INSERIR VALORES T2(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (O número de linhas afetadas é 1 linha)   
  --*/   
  VAI   
   
  --   ===========================================   
  -- Testar três funções: 2   
  --   ===========================================   
  INSERIR VALORES T1(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (O número de linhas afetadas é 1 linha)   
  --*/   
  VAI   
   
  --   ===========================================   
  -- Testar três funções: 3   
  -- ** Abra uma nova conexão e execute o seguinte código **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 & n     
   
  --===========================================   
  -- Excluir o ambiente de teste   
  --   ===========================================   
  TABELA DE DESCIDA T1,T2     
   
  -- b) Descrição do resultado do código     
  Como você pode ver no código acima:   
  IDENT_CURRENT() sempre retorna o último valor identificado inserido na tabela especificada   
  @@IDENTITY Retorna o valor de identidade da sessão atual, esteja no mesmo escopo ou não, nos testes 1 e 2, pode-se ver que retorna o valor de identidade do registro inserido no trigger, e em   
   
  No Teste 3, NULL é retornado porque não há registro de inserção na sessão atual   
  SCOPE_IDENTITY() retorna o valor de identificação do mesmo escopo da sessão atual, então no teste 1, 2, retorna o valor que não é afetado pelo gatilho, e no teste 3, porque a sessão atual não é interpolada   
   
  record, então retorna NULL





Anterior:Por que todo mundo foi ao feriado do Dia do Trabalhador?
Próximo:Qual é a diferença entre SCOPE_IDENTITY() ser escrito antes e depois no t-sql?
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com