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

IDENTITY() vs IDENTITY() i SQL Server:Hvad er forskellen?

Det kan virke mærkeligt, men T-SQL har en IDENTITY() egenskab og en IDENTITY() funktion, som hver tjener et (lignende, men) forskelligt formål.

  • IDENTITY() egenskab opretter en identitetskolonne i en tabel. En identitetskolonne indeholder et automatisk stigende identifikationsnummer. Denne egenskab bruges sammen med CREATE TABLE og ALTER TABLE udsagn.
  • IDENTITY() funktion bruges dog kun i en SELECT sætning med en INTO tabelsætning for at indsætte en identitetskolonne i en ny tabel.

Der er også SQL-DMO Identity egenskab, der afslører rækkeidentitetsegenskaben for en kolonne, men det vil jeg ikke dække her. Microsoft anbefaler, at denne egenskab vil blive fjernet i en fremtidig version af SQL Server, og at du bør undgå at bruge den i nyt udviklingsarbejde.

IDENTITY()-egenskab

Her er et eksempel på brug af IDENTITY() ejendom.

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

Denne kode opretter en tabel med to kolonner. Den første kolonne (PetId ) er en identitetskolonne (fordi jeg bruger IDENTITY() ejendom i sin definition).

Nu hvor jeg har oprettet en identitetskolonne, kan jeg indsætte kæledyrsnavne i PetName kolonne uden at skulle inkludere et ID for hver række.

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

SELECT * FROM Pet;

Resultat:

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

I dette tilfælde starter nummereringen ved 1, og hver række øges med 1. Dette skyldes, at jeg brugte IDENTITY(1,1) for at angive, at startværdien er 1, og at den øges med 1 på hver ny række.

IDENTITY() Funktion

Som nævnt er IDENTITY() funktionen bruges i en SELECT INTO udmelding. Her er et eksempel på brug af 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       |
+----------+------------+

Her oprettede jeg en tabel kaldet BestFriends og udfyldte den fra Pets bord.

I dette tilfælde startede jeg optællingen ved 101 og øgede den med 10. Bemærk også, at funktionen kræver det første argument for at angive datatypen for kolonnen.


  1. SQLPlus - spooling til flere filer fra PL/SQL-blokke

  2. MySQL vælger hurtigt 10 tilfældige rækker fra 600.000 rækker

  3. 3 måder at finde rækker, der indeholder små bogstaver i MySQL

  4. Sådan løses Problemet med godkendelsesplugin 'caching_sha2_password' kunne ikke indlæses