sql >> Databasteknik >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() i SQL Server:Vad är skillnaden?

Det kan verka konstigt, men T-SQL har en IDENTITY() egenskap och en IDENTITY() funktion, som var och en tjänar ett (liknande men) olika syfte.

  • IDENTITY() egenskap skapar en identitetskolumn i en tabell. En identitetskolumn innehåller ett automatiskt ökande identifikationsnummer. Den här egenskapen används med CREATE TABLE och ALTER TABLE uttalanden.
  • IDENTITY() Funktionen används dock endast i en SELECT uttalande med en INTO tabellsats för att infoga en identitetskolumn i en ny tabell.

Det finns också SQL-DMO Identity egenskap som exponerar radidentitetsegenskapen för en kolumn, men jag kommer inte att täcka det här. Microsoft rekommenderar att den här egenskapen kommer att tas bort i en framtida version av SQL Server och att du bör undvika att använda den i nytt utvecklingsarbete.

IDENTITY() Egenskap

Här är ett exempel på hur du använder IDENTITY() egendom.

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

Denna kod skapar en tabell med två kolumner. Den första kolumnen (PetId ) är en identitetskolumn (eftersom jag använder IDENTITY() egendom i dess definition).

Nu när jag har skapat en identitetskolumn kan jag infoga husdjursnamn i PetName kolumn utan att behöva inkludera ett ID för varje rad.

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

SELECT * FROM Pet;

Resultat:

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

I det här fallet börjar numreringen på 1 och varje rad ökar med 1. Detta beror på att jag använde IDENTITY(1,1) för att ange att startvärdet är 1 och att det ökas med 1 på varje ny rad.

IDENTITY() Funktion

Som nämnts, IDENTITY() funktionen används i en SELECT INTO påstående. Här är ett exempel på hur du använder IDENTITY() funktion.

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

SELECT * FROM BestFriends;

Resultat:

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

Här skapade jag en tabell som heter BestFriends och fyllde den från Pets tabell.

I det här fallet startade jag räkningen på 101 och ökade den med 10. Observera också att funktionen kräver det första argumentet för att ange datatypen för kolumnen.


  1. Jämför exekveringsplaner i SQL Server

  2. ORA-22905 - när du frågar en tabelltyp med en select-sats

  3. Kan jag kopiera en rad i MySQL för att infoga i samma tabell?

  4. SET-operatorer i SQL