Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() no SQL Server:Qual é a diferença?


Pode parecer estranho, mas o T-SQL tem um IDENTITY() propriedade e um IDENTITY() função, cada uma das quais serve a um propósito (semelhante, mas) diferente.
  • A IDENTITY() cria uma coluna de identidade em uma tabela. Uma coluna de identidade contém um número de identificação que aumenta automaticamente. Esta propriedade é usada com o CREATE TABLE e ALTER TABLE declarações.
  • A IDENTITY() A função no entanto, é usada apenas em um SELECT instrução com um INTO cláusula table para inserir uma coluna de identidade em uma nova tabela.

Há também o SQL-DMO Identity propriedade que expõe a propriedade de identidade de linha de uma coluna, mas não abordarei isso aqui. A Microsoft informa que essa propriedade será removida em uma versão futura do SQL Server e que você deve evitar usá-la em novos trabalhos de desenvolvimento.


Propriedade IDENTITY()


Aqui está um exemplo de uso de IDENTITY() propriedade.
CREATE TABLE Pets (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255)
    );

Este código cria uma tabela com duas colunas. A primeira coluna (PetId ) é uma coluna de identidade (porque eu uso o IDENTITY() propriedade em sua definição).

Agora que criei uma coluna de identidade, posso inserir nomes de animais de estimação no PetName coluna sem precisar incluir um ID para cada linha.
INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Resultado:
+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
+---------+-----------+

Nesse caso, a numeração começa em 1 e cada linha é incrementada em 1. Isso ocorre porque usei IDENTITY(1,1) para especificar que o valor de semente é 1 e que é incrementado em 1 em cada nova linha.

Função IDENTIDADE()


Como mencionado, o IDENTITY() função é usada em um SELECT INTO demonstração. Aqui está um exemplo de uso de IDENTITY() função.
SELECT 
  IDENTITY(int, 101, 10) AS pet_id,
  PetName AS pet_name
INTO BestFriends
FROM Pets;

SELECT * FROM BestFriends;

Resultado:
+----------+------------+
| pet_id   | pet_name   |
|----------+------------|
| 101      | Homer      |
| 111      | Felix      |
| 121      | Ruff       |
+----------+------------+

Aqui, criei uma tabela chamada BestFriends e o preencheu a partir de Pets tabela.

Nesse caso, iniciei a contagem em 101 e a incrementei em 10. Observe também que a função requer o primeiro argumento para especificar o tipo de dados da coluna.