Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() w SQL Server:jaka jest różnica?

Może wydawać się to dziwne, ale T-SQL ma funkcję IDENTITY() właściwość i IDENTITY() funkcja, z których każda służy (podobnemu, ale) innemu celowi.

  • IDENTITY() Właściwość tworzy kolumnę tożsamości w tabeli. Kolumna tożsamości zawiera automatycznie rosnący numer identyfikacyjny. Ta właściwość jest używana z CREATE TABLE i ALTER TABLE sprawozdania.
  • IDENTITY() funkcja jest jednak używana tylko w SELECT instrukcja z INTO klauzula table, aby wstawić kolumnę tożsamości do nowej tabeli.

Istnieje również SQL-DMO Identity Właściwość, która ujawnia właściwość tożsamości wiersza kolumny, ale nie będę tego tutaj omawiać. Firma Microsoft informuje, że ta właściwość zostanie usunięta w przyszłej wersji SQL Server i należy unikać jej używania w nowych pracach programistycznych.

Właściwość IDENTITY()

Oto przykład użycia IDENTITY() właściwość.

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

Ten kod tworzy tabelę z dwiema kolumnami. Pierwsza kolumna (PetId ) jest kolumną tożsamości (ponieważ używam IDENTITY() w swojej definicji).

Teraz, po utworzeniu kolumny tożsamości, mogę wstawić imiona zwierząt do PetName kolumna bez konieczności dołączania identyfikatora dla każdego wiersza.

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

SELECT * FROM Pet;

Wynik:

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

W tym przypadku numeracja zaczyna się od 1, a każdy wiersz zwiększa się o 1. Dzieje się tak, ponieważ użyłem IDENTITY(1,1) aby określić, że wartość seed wynosi 1 i że jest zwiększana o 1 w każdym nowym wierszu.

Funkcja IDENTITY()

Jak wspomniano, IDENTITY() funkcja jest używana w SELECT INTO oświadczenie. Oto przykład użycia IDENTITY() funkcja.

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

SELECT * FROM BestFriends;

Wynik:

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

Tutaj stworzyłem tabelę o nazwie BestFriends i wypełnił go z Pets stół.

W tym przypadku zacząłem zliczanie od 101 i zwiększyłem je o 10. Zauważ też, że funkcja wymaga pierwszego argumentu do określenia typu danych kolumny.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana kolumny:null na not null

  2. LOG() Przykłady w SQL Server

  3. określenie zestawu znaków tabeli/bazy danych?

  4. Sparametryzuj klauzulę SQL IN

  5. W jakiej kolumnie należy umieścić indeks klastrowy?