SQLShack (Norsk)

Denne artikkelen utforsker Identitet funksjon i SQL Server med eksempler og forskjeller mellom disse funksjonene.

Oversikt over IDENTITET kolonner

I SQL Server, kan vi skape en identitet kolonnen til auto-genererer trinnvis verdier. Det genererer verdier basert på forhåndsdefinerte frø (opprinnelig verdi) og trinn (trinn) verdi. For eksempel, anta at vi har en Ansatt bordet og vi ønsker å generere EmployeeID automatisk., Vi har en start ansatt ID 100 og videre vil økning hver nye EmpID etter en. I dette tilfellet trenger vi å definere disse verdiene.

  • Frø: 100
  • Trinn: 1

La oss sette inn et par poster i denne tabellen, og vise oppføringer.

Du kan se den første ansatte får et ID-verdien 100, og hver nye rekorder ID-verdien får en økning av én.

Vi har et par nyttige Identitet funksjoner i SQL Server å jobbe med IDENTITET kolonner i en tabell. La oss se nærmere på følgende IDENTITET funksjoner med eksempler.,

  • SQL @@IDENTITET Funksjon
  • SQL SCOPE_IDENTITY () – Funksjonen
  • SQL IDENT_CURRENT Funksjon
  • SQL IDENTITET Funksjon

SQL @@IDENTITET Funksjon

Vi bruke systemet fungerer @@IDENTITET til å returnere brukt maksimum IDENTITET verdien i en tabell for IDENTITET kolonne under den gjeldende økten. Når vi setter inn en rad i en tabell, blir @@IDENTITET funksjonen kolonne gir IDENTITET verdi som genereres av uttalelsen. Hvis vi kjøre en spørring som ikke genererer IDENTITET verdier, får vi NULL-verdi i resultatet., SQL @@IDENTITET går under virkeområdet for gjeldende økt. Vi kan ikke bruke den på en ekstern eller koblet server.

La oss forstå det med følgende eksempel.

  • Trinn 1: Vi har en gjeldende maksimale identitet verdi 110 i EmployeeData tabell
  • Trinn 2: I den gjeldende økten, vil vi sette inn en post i EmployeeData bordet., Den øker identiteten verdien av en
  • Trinn 3: Vi kan bekrefte at det maksimalt brukes identitet verdi er 111
  • Step4: Vi bruker VELGER @@IDENTITET funksjon i den aktuelle økten for å få identiteten verdi som genereres i denne sesjonen

La oss sette inn flere poster i denne tabellen og kjøre VELG @@IDENTITET.

Hvis vi setter inn flere poster i en sesjon, VELGER @@Identitet returnerer den høyeste IDENTITET verdi som genereres i denne økten., I følgende eksempel vil vi sette inn tre plater, og den øker IDENTITET verdier av tre fra gjeldende identitet verdi 111.

Hvis erklæringen ikke genererer noen identitet verdier, returnerer NULL-verdier i utgang.

SQL SCOPE_IDENTITY () – funksjonen

Vi bruke SCOPE_IDENTITY () – funksjonen til å returnere den siste IDENTITET verdien i en tabell under dagens omfang. Et område kan være en modul, trigger, funksjon eller en lagret prosedyre., Vi kan vurdere SQL SCOPE_IDENTITY () – funksjonen ligner @@IDENTITET funksjon, men det er begrenset til et bestemt omfang. Den returnerer NULL verdi hvis denne funksjonen er involvert før en setter uttalelse genererer verdi under samme omfang.

I det følgende eksempelet, ser vi at både @@IDENTITET og SCOPE_IDENTITY() returnere samme verdi i gjeldende økt, og tilsvarende omfang.

La oss forstå forskjellen mellom SCOPE_IDENTITY() og @@IDENTITET med et annet eksempel.,

La oss se at vi har to tabeller EmployeeData og Avdelinger bordet. Vi opprette et SETT trigger på EmployeeData bordet. Når vi setter inn en rad på EmployeeData det krav til definerte trigger for å sette inn en rad i Avdelinger.

I det følgende søket, vi oppretter en trigger til å sette inn standardverdien » DET » i avdelingene tabell for hvert sett inn i EmployeeData bordet.,f7″>

1
2
3
4
5
6

OPPRETT UTLØSE T_INSERT_DEPARTMENT
PÅ EmployeeData
FOR å SETTE inn SOM
BEGYNNER
SETT inn Avdelinger VERDIER («DET»)
END;

La oss sette inn verdien i de Ansattes data bordet og vise utdata på begge @@IDENTITET og SCOPE_IDENTITY() funksjoner.,

I den gjeldende økten, vi satt inn data i EmployeeData bordet. Det genererer en identitet i denne tabellen. Identiteten frø verdien 1 for EmployeeData bordet.

Når vi setter inn verdien i EmployeeData bord, er det utløses en trigger til å sette inn verdien i Avdelingene bordet. Identiteten frø verdi er 100 for Instituttene tabellen.

  • Vi få den ut 100 for å VELGE @@IDENTITET funksjon
  • SCOPE_IDENTITY funksjonen returnerer identitet verdi under dagens omfang bare., Det gir utgang 1 til denne funksjonen

SQL IDENT_CURRENT () – funksjonen

Vi bruke IDENT_CURRENT-funksjonen til å returnere den siste IDENTITET verdi generert for angitte tabellen under enhver sammenheng. Det gjør ikke vurdere omfanget av SQL-spørring som genererer identitet verdi. Vi trenger å angi bordet som vi ønsker å sjekke identiteten verdi.

I det følgende skjermbilde, kan vi se at vi setter inn data i Session-id 64, og det genereres identitet verdien 2 i EmployeeData bordet.,

Vi kan se i en annen tilkobling-vinduet om gjeldende identitet verdi for EmployeeData bordet og få samme effekt som identitet verdi 2.,

1
SELECT IDENT_CURRENT(‘EmployeeData’) AS IdentityValue

SQL IDENTITY Function

In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Vi kan bruke SQL IDENTITET funksjonen til å sette inn identitet verdiene i tabellen er opprettet av SQL SELECT TIL uttalelse.

som standard, hvis en kilde tabell inneholder en IDENTITET kolonnen, så bordet er opprettet ved hjelp av en utvalgt TIL uttalelse arver den. Vurdere en situasjon der du ønsker å opprette en tabell ved hjelp av den VELG TIL uttalelse fra produksjon av en visning eller delta fra flere tabeller. I dette tilfellet, vil du lage en IDENTITET kolonne i en ny tabell som godt.,

  • Merk: SQL IDENTITET funksjonen er forskjellig fra den IDENTITET eiendel vi bruker når du oppretter et bord.

Vi trenger å angi en datatype for en kolonne til å bruke SQL Identitet funksjon. Vi trenger også å angi FRØ og Trinn verdier for å definere en identitet konfigurasjon.

Vi ikke kan bruke SQL IDENTITET Funksjon i en Select-setning. Vi får følgende feilmelding.

Msg 177, Nivå 15, Tilstand 1, Linje 2l IDENTITET funksjonen kan bare brukes når SELECT-setning har en I pkt.,

La oss opprette en tabell ved å bruke SQL SELECT TIL uttalelse med følgende spørring.

Når-setningen utføres, se tabellen egenskaper ved hjelp av sp_help kommando.

1
sp_help ‘TEMPTABLE’

Du kan se IDENTITET kolonne i TEMPTABLE egenskaper som per den angitte betingelser.,

La oss se på et annet eksempel. Utfør følgende kommando.,

1
2
3
4
5

VELG IDENTITET( INT, 100, 2) SOM NEW_ID,
ID
Navn
I temp2
FRA employeedata;

Vi har allerede IDENTITET kolonne i EmployeeData bordet. Den nye tabellen temp2 også arver IDENTITET kolonne., Vi kan ikke ha flere IDENTITET kolonner i en tabell. På grunn av dette, får vi følgende feilmelding.

Msg 8108 Nivå 16, Tilstand 1, Linje 1Cannot legge til identitet kolonnen, ved hjelp av den VELG TIL uttalelse, til bord «temp2», som allerede har kolonnen ‘ID’ som arver identitet eiendom.

Oppsummering

– >

  1. SQL IDENTITET Funksjoner SCOPE_IDENTITY, IDENT_CURRENT, og @@IDENTITET avkastning tilsvarende utgang for en IDENTITET kolonner i gjeldende økten
  2. SCOPE_IDENTITY returnerer verdier under dagens omfang bare., Vi kan definere omfang som en modul, Lagret prosedyre, trigger eller en funksjon
  3. IDENT_CURRENT funksjonen returnerer identitet verdi for en bestemt tabell om en forbindelse som endret verdien
  4. kan Vi bruke SQL IDENTITET-funksjonen for å definere IDENTITET i en tabell som er opprettet ved hjelp av SQL SELECT TIL uttalelse

Konklusjon

hadde I denne artikkelen, vi utforsket Identitet funksjoner i SQL Server. Vi skal bli kjent med funksjonene for å bruke dem i å skrive t-SQL-spørringer. Hvis du har kommentarer eller spørsmål, gjerne la dem i kommentarfeltet nedenfor.,

  • Forfatter
  • Siste Innlegg
Som en MCSA sertifisert som Microsoft Certified Trainer i Gurgaon, India, med 13 års erfaring, Rajendra fungerer for en rekke store selskaper med fokus på ytelse optimalisering, overvåking, høy tilgjengelighet og gjenoppretting etter katastrofe strategier og gjennomføring., Han er forfatter av hundrevis av autoritative artikler på SQL Server, Azure, MySQL, Linux, Elektriske BI, ytelsesjustering, AWS/Amazon / RDS, Git, og relaterte teknologier som har blitt sett av over 10m lesere oppdatert.
Han er skaperen av en av de største gratis online samlinger av artikler på et enkelt tema, med hans 50-del serien på SQL Server Alltid På Grupper av Tilgjengelighet. Basert på hans bidrag til SQL Server-samfunnet, han har blitt anerkjent med ulike priser inkludert den prestisjefylte «Beste forfatter av the year» kontinuerlig i 2020 og 2021 på SQLShack.,
Raj er alltid interessert i nye utfordringer, slik at hvis du har behov for rådgivning hjelpe på alle fag som er dekket i hans skrifter, han kan nås på rajendra.gupta16@gmail.,com
Vis alle innlegg av Rajendra Gupta

Siste innlegg av Rajendra Gupta (se alle)
  • Utføre små og store versjon oppgraderinger for AWS RDS SQL Server – 29. januar 2021
  • Distribusjon AWS RDS-PostgreSQL-forekomster – 27. januar 2021
  • Migrere din lokale SQL databaser til AWS RDS SQL Server ved hjelp av AWS DMS – 25 januar 2021

Share

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *