Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() in SQL Server:qual è la differenza?

Potrebbe sembrare strano, ma T-SQL ha un IDENTITY() proprietà e un IDENTITY() funzione, ognuna delle quali ha uno scopo (simile, ma) diverso.

  • Il IDENTITY() la proprietà crea una colonna di identità in una tabella. Una colonna di identità contiene un numero di identificazione a incremento automatico. Questa proprietà viene utilizzata con CREATE TABLE e ALTER TABLE dichiarazioni.
  • Il IDENTITY() tuttavia, viene utilizzata solo in un SELECT istruzione con un INTO clausola table per inserire una colonna identity in una nuova tabella.

C'è anche SQL-DMO Identity proprietà che espone la proprietà dell'identità di riga di una colonna, ma non lo tratterò qui. Microsoft consiglia di rimuovere questa proprietà in una versione futura di SQL Server e di evitare di utilizzarla in nuovi lavori di sviluppo.

Proprietà IDENTITY()

Ecco un esempio di utilizzo di IDENTITY() proprietà.

CREATE TABLE Pets (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255)
    );

Questo codice crea una tabella con due colonne. La prima colonna (PetId ) è una colonna di identità (perché utilizzo IDENTITY() proprietà nella sua definizione).

Ora che ho creato una colonna di identità, posso inserire nomi di animali domestici nel PetName colonna senza dover includere un ID per ogni riga.

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Risultato:

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

In questo caso, la numerazione inizia da 1 e ogni riga aumenta di 1. Questo perché ho usato IDENTITY(1,1) per specificare che il valore del seme è 1 e che viene incrementato di 1 ad ogni nuova riga.

Funzione

IDENTITÀ()

Come accennato, il IDENTITY() viene utilizzata in un SELECT INTO dichiarazione. Ecco un esempio di utilizzo di IDENTITY() funzione.

SELECT 
  IDENTITY(int, 101, 10) AS pet_id,
  PetName AS pet_name
INTO BestFriends
FROM Pets;

SELECT * FROM BestFriends;

Risultato:

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

Qui ho creato una tabella chiamata BestFriends e l'ho popolato da Pets tavolo.

In questo caso ho iniziato il conteggio a 101 e l'ho incrementato di 10. Si noti inoltre che la funzione richiede il primo argomento per specificare il tipo di dati della colonna.