SQLShack (Português)

Este artigo explora a função de identidade no servidor SQL com exemplos e diferenças entre estas funções.

Visão Geral das colunas de identidade

no servidor SQL, criamos uma coluna de identidade para gerar automaticamente valores incrementais. Gera valores baseados no valor pré-definido das sementes (valor inicial) e do passo (incremento). Por exemplo, suponha que temos uma tabela de funcionários e queremos gerar o emprego automaticamente., Temos um ID de empregado inicial 100 e ainda mais querem aumentar cada EmpID novo por um. Neste caso, precisamos definir os seguintes valores.para sementeira: 100 Passo: 1

vamos inserir alguns registros nesta tabela e ver os registros.

Você pode ver que o primeiro funcionário recebe um valor de ID 100 e cada novo valor de ID registra um incremento de um.

temos algumas funções de identidade úteis no servidor SQL para trabalhar com as colunas de identidade em uma tabela. Vamos explorar as seguintes funções de identidade com exemplos.,

  • SQL @@IDENTITY Função
  • SQL Função SCOPE_IDENTITY ()
  • SQL Função IDENT_CURRENT
  • SQL IDENTIDADE de Função

SQL @@IDENTITY Função

Nós usar a função de sistema @@IDENTITY para retornar o máximo valor de IDENTIDADE utilizado em uma tabela para a coluna de IDENTIDADE em sessão atual. Uma vez que inserimos uma linha em uma tabela, a coluna da função @@identidade dá o valor de identidade gerado pela declaração. Se executarmos qualquer consulta que não gerou valores de identidade, obtemos valor nulo na saída., A identidade SQL @@ @ é executada no âmbito da sessão actual. Não podemos usá-lo num servidor remoto ou ligado.

vamos entendê-lo com o seguinte exemplo.

  • Passo 1: Temos um valor de identidade máximo actual 110 na tabela de dados de emprego
  • Passo 2: na sessão actual, introduzimos um registo na tabela de dados de emprego., Ele incrementa o valor de identidade por um
  • Passo 3: podemos verificar que o máximo valor de identidade utilizado é 111
  • Passo 4: Podemos usar o SELECT @@IDENTITY função na sessão atual para obter o valor de identidade gerado nesta sessão

Vamos inserir vários registros na tabela e executar o SELECT @@IDENTITY.

Se introduzirmos vários registos numa sessão, seleccione @@Identity devolve o valor máximo de identidade gerado nesta sessão., No exemplo a seguir, inserimos três registros, e ele aumenta os valores de identidade em três do valor de identidade atual 111.

Se a declaração não gerar quaisquer valores de identidade, devolve valores nulos na saída.

SQL SCOPE_ identity() função

usamos a função SCOPE_ Identity() para devolver o último valor de identidade numa tabela sob o âmbito actual. Um escopo pode ser um módulo, gatilho, função ou um procedimento armazenado., Podemos considerar a função SQL SCOPE_IDENTITY () semelhante à função @@identidade, mas está limitada a um escopo específico. Devolve o valor nulo se esta função estiver envolvida antes de uma declaração de inserção gerar valor no mesmo âmbito.

no exemplo a seguir, vemos que tanto a @@identidade e SCOPE_IDENTITY() retornam o mesmo valor na sessão atual e escopo similar.

Let’s understand the difference between SCOPE_IDENTITY() and @IDENTITY with another example.,vamos considerar que temos duas tabelas emprego dados e departamentos tabela. Criamos um gatilho de inserção na tabela Empregeedata. Uma vez que inserimos qualquer linha em Empregeedata, ele chama para gatilho definido para inserir uma linha em departamentos.

na seguinte consulta, criamos um trigger para inserir o valor padrão ‘IT’ na tabela departamentos para cada inserção na tabela Empregeedata.,f7″>

1
2
3
4
5
6

CREATE TRIGGER T_INSERT_DEPARTMENT
NO EmployeeData
PARA INSERIR COMO
INICIAR
INSERIR Departamentos VALUES (‘ELE’)
END;

Vamos inserir o valor em que o Empregado tabela de dados e exibir a saída de @@IDENTITY e SCOPE_IDENTITY() funções.,

na sessão actual, introduzimos dados na tabela emprego-dados. Gera uma identidade nesta tabela. O valor da semente de identidade é 1 para a tabela de dados de emprego.

Uma vez inserido o valor na tabela emprego-dados, dispara um gatilho para inserir o valor na tabela departamentos. O valor da semente de identidade é de 100 para a tabela departamentos.

  • obtemos o resultado 100 para a função SELECT @@identidade
  • A função SCOPE_ identity devolve o valor da identidade apenas no âmbito actual., Ele dá a saída 1 para esta função

SQL IDENT_CURRENT() função

Podemos usar a função IDENT_CURRENT para retornar o último valor de IDENTIDADE gerado para uma tabela específica em qualquer conexão. Ele não considera o escopo da consulta SQL que gera valor de identidade. Precisamos especificar a tabela para a qual queremos verificar o valor da identidade.

na imagem seguinte, podemos ver que inserimos dados no ID de sessão 64 e gera o valor de identidade 2 na tabela Empregeedata.,

Podemos verificar em outra janela de conexão sobre o valor de identidade atual para a tabela Empregeedata e obter a mesma saída que o valor de identidade 2.,

1
SELECT IDENT_CURRENT(‘EmployeeData’) AS IdentityValue

SQL IDENTITY Function

In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Podemos usar a função de identidade SQL para inserir valores de identidade na tabela criada por SQL SELECT na instrução.

Por padrão, se uma tabela de código contém uma coluna de identidade, então a tabela criada usando uma seleção na instrução herda-a. Considere um cenário em que você deseja criar uma tabela usando a opção em declaração a partir da saída de uma vista ou juntar a partir de várias tabelas. Neste caso, você quer criar uma coluna de identidade em uma nova tabela também.,

  • Nota: A função de identidade SQL é diferente da propriedade de identidade que usamos ao criar qualquer tabela.

precisamos especificar um tipo de dados para uma coluna usar a função identidade SQL. Também precisamos especificar valores de sementes e passos para definir uma configuração de identidade.

não podemos usar a função de identidade SQL em uma instrução selecionada. Recebemos a seguinte mensagem de erro.

Msg 177, nível 15, Estado 1, Linha 2 a função de identidade só pode ser usada quando a declaração seleta tem uma cláusula em.,

vamos criar uma tabela usando o SQL selecione na instrução com a seguinte consulta.

Uma vez que a instrução seja executada, verifique as propriedades da tabela usando o comando sp_help.

1
sp_help ‘TEMPTABLE’

Você pode ver a coluna de IDENTIDADE na TEMPTABLE propriedades conforme as condições especificadas.,

Execute o seguinte comando.,

1
2
3
4
5

SELECIONE a IDENTIDADE( INT, 100, 2) COMO NEW_ID,
ID
Nome
EM temp2
a PARTIR de employeedata;

Nós já temos a coluna de IDENTIDADE na EmployeeData tabela. A nova tabela temp2 também herda a coluna identidade., Não podemos ter múltiplas colunas de identidade em uma tabela. Devido a isso, recebemos a seguinte mensagem de erro.

Msg 8108, Nível de 16, Estado 1, Linha 1Cannot adicionar coluna de identidade, usando a instrução SELECT INTO, a mesa “temp2”, que já tem a coluna ‘ID’, que herda a propriedade de identidade.

resumo

  1. funções de identidade SQL SCOPE_ identity, IDENT_ CURRENT e @@IDENTITY devolve um resultado semelhante para uma coluna de identidade na sessão actual
  2. SCOPE_ identity devolve valores apenas no âmbito actual., Podemos definir o escopo como um módulo, Stored procedure, trigger ou uma função
  3. a função IDENT_CURRENT retorna valor de identidade para uma tabela especificada sobre uma ligação que modificou o valor de
  4. podemos usar o SQL IDENTIDADE de função para definir a IDENTIDADE em uma tabela criada usando o SQL instrução SELECT INTO

Conclusão

neste artigo, exploramos a Identidade de funções no SQL Server. Devemos estar familiarizados com as funções para usá-los por escrito T-SQL consultas. Se você tem comentários ou perguntas, sinta-se livre para deixá-los nos comentários abaixo.,

  • Autor
  • Posts Recentes
Como uma certificação MCSA e Microsoft Certified Trainer em Gurgaon, na Índia, com 13 anos de experiência, Rajendra trabalha para uma variedade de empresas de grande porte com foco em otimização de desempenho, monitoramento, alta disponibilidade e recuperação de desastres estratégias e implementação., Ele é o autor de centenas de artigos autoritários no SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git, e tecnologias relacionadas que foram vistas por mais de 10m leitores até à data. ele é o criador de uma das maiores coleções online gratuitas de artigos sobre um único tópico, com sua série de 50 partes no servidor SQL sempre em grupos de disponibilidade. Com base em sua contribuição para a comunidade de servidores SQL, ele foi reconhecido com vários prêmios, incluindo o prestigiado “melhor autor do ano” continuamente em 2020 e 2021 no SQLShack.,Raj está sempre interessado em novos desafios, então se você precisar de Ajuda em qualquer assunto coberto em seus escritos, ele pode ser alcançado em rajendra.gupta16@gmail.,com
Ver todos os posts por Rajendra Gupta

posts mais Recentes por Rajendra Gupta (ver todas)
  • Realização de pequenas e principais atualizações de versão para o AWS RDS para SQL Server – janeiro 29, 2021
  • a Implantação da AWS RDS PostgreSQL instâncias – 27 de janeiro de 2021
  • a Migração de seu local de bases de dados SQL para a AWS RDS para SQL Server usando o AWS DMS – 25 de janeiro de 2021

Share

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *