Denne artikel udforsker Identitet funktion i SQL Server med eksempler og forskelle mellem disse funktioner.
oversigt over IDENTITETSKOLONNER
I S .l Server opretter vi en identitetskolonne til automatisk generering af inkrementelle værdier. Det genererer værdier baseret på foruddefineret frø (startværdi) og trin (tilvækst) værdi. Antag for eksempel, at vi har en medarbejder tabel, og vi ønsker at generere EmployeeID automatisk., Vi har et startende medarbejder – id 100 og ønsker yderligere at forøge hvert nyt EmpID med en. I dette tilfælde skal vi definere følgende værdier.
- frø: 100
- Trin: 1
lad os indsætte et par poster i denne tabel og se posterne.
Du kan se, at den første medarbejder får en ID-værdi 100, og hver nye records-id-værdi får en stigning på en.
Vi har et par nyttige Identitetsfunktioner I S .l Server til at arbejde med IDENTITETSKOLONNER i en tabel. Lad os undersøge følgende IDENTITETSFUNKTIONER med eksempler.,
- SQL @@IDENTITET Funktion
- SQL SCOPE_IDENTITY() Funktion
- SQL IDENT_CURRENT Funktion
- SQL IDENTITET Funktion
SQL @@IDENTITET Funktion
Vi bruger systemet til at fungere @@IDENTITET for at vende tilbage den maksimale anvendes IDENTITET værdi i en tabel for id-kolonnen under den aktuelle session. Når vi har indsat en række i en tabel, giver kolonnen @@IDENTITY-funktion den IDENTITETSVÆRDI, der genereres af udsagnet. Hvis vi kører en forespørgsel, der ikke genererede IDENTITETSVÆRDIER, får vi NULL-værdi i output., S .l @@IDENTITY kører under omfanget af den aktuelle session. Vi kan ikke bruge det på en ekstern eller linket server.
lad os forstå det med følgende eksempel.
- Trin 1: Vi har en aktuel maksimal identitetsværdi 110 i EmployeeData-tabellen
- Trin 2: i den aktuelle session indsætter vi en post i EmployeeData-tabellen., Det intervaller identitet værdi af et
- Trin 3: Vi kan kontrollere, at den maksimale anvendes identitet værdi er 111
- Step4: Vi bruger SELECT @@IDENTITET funktion i den aktuelle session, for at få den identitet, værdi, der genereres i denne session
Lad os indsæt flere poster i denne tabel og udføre SELECT @@IDENTITET.
Hvis vi indsætter flere poster i en session, returnerer vi den maksimale IDENTITETSVÆRDI, der genereres i denne session., I det følgende eksempel indsætter vi tre poster, og det øger IDENTITETSVÆRDIER med tre fra den aktuelle identitetsværdi 111.
Hvis sætningen ikke genererede nogen identitetsværdier, returnerer den NULL-værdier i output.
SQL SCOPE_IDENTITY() funktion
Vi bruger SCOPE_IDENTITY () – funktion til at returnere den sidste IDENTITET værdi i en tabel under det nuværende omfang. Et omfang kan være et modul, trigger, funktion eller en gemt procedure., Vi kan overveje s .l SCOPE_IDENTITY() funktion svarende til @@identitet funktion, men det er begrænset til et bestemt omfang. Det returnerer NULL-værdien, hvis denne funktion er involveret, før en insert-sætning genererer værdi under samme omfang.
i det følgende eksempel ser vi, at både @@IDENTITY og SCOPE_IDENTITY() returnerer den samme værdi i den aktuelle session og lignende omfang.
Lad os forstå forskellen mellem SCOPE_IDENTITY() og @@IDENTITET med et andet eksempel.,
lad os overveje, at vi har to tabeller EmployeeData og afdelinger tabel. Vi opretter en INDSATSUDLØSER på EmployeeData-tabellen. Når vi indsætter en række på EmployeeData, det opfordrer til defineret trigger til at indsætte en række i afdelinger.
i den følgende forespørgsel opretter vi en trigger til at indsætte standardværdien ‘IT’ i afdelingstabellen for hver indsats i EmployeeData-tabellen.,f7″>
1
2
3
4
5
6
|
OPRET UDLØSE T_INSERT_DEPARTMENT
PÅ EmployeeData
FOR at INDSÆTTE SOM
BEGYND
INDSÆT Afdelinger VALUES (‘DET’)
SLUT;
|
Lad os indsætte værdien i Medarbejder-data tabel og se output på både @@IDENTITET og SCOPE_IDENTITY () – funktioner.,
i den aktuelle session indsatte vi data i EmployeeData-tabellen. Det genererer en identitet i denne tabel. Identitetsfrøværdien er 1 for EmployeeData-tabellen.
Når vi indsætter værdi i EmployeeData-tabellen, udløses en trigger for at indsætte værdi i Afdelingstabellen. Identiteten frø værdi er 100 for afdelingerne tabellen.
- Vi får output 100 for SELECT @@IDENTITY-funktionen
- SCOPE_IDENTITY-funktionen returnerer kun identitetsværdi under det aktuelle omfang., Det giver output 1 for denne funktion
SQL IDENT_CURRENT() funktion
Vi bruger den IDENT_CURRENT funktion til at returnere den sidste IDENTITET værdi, der genereres for en bestemt tabel under nogen forbindelse. Det overvejer ikke omfanget af S .l-forespørgslen, der genererer identitetsværdi. Vi skal angive den tabel, som vi vil kontrollere identitetsværdien for.i det følgende skærmbillede kan vi se, at vi indsætter data i Session id 64, og det genererer identitetsværdi 2 i EmployeeData-tabellen.,
Vi kan i et andet forbindelsesvindue kontrollere den aktuelle identitetsværdi for EmployeeData-tabellen og få det samme output som identitetsværdi 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 bruge S .l-IDENTITETSFUNKTIONEN til at indsætte identitetsværdier i tabellen oprettet af s .l SELECT i erklæring.
hvis en kildetabel som standard indeholder en IDENTITETSKOLONNE, arver tabellen, der er oprettet ved hjælp af en SELECT INTO-erklæring, den. Overvej et scenario, hvor du vil oprette en tabel ved hjælp af SELECT INTO-sætningen fra output fra en visning eller deltage fra flere tabeller. I dette tilfælde vil du også oprette en IDENTITETSKOLONNE i en ny tabel.,
- Bemærk: S .l-IDENTITETSFUNKTIONEN er forskellig fra den IDENTITETSEGENSKAB, vi bruger, mens vi opretter en tabel.
Vi skal angive en datatype for en kolonne for at bruge S .l-Identitetsfunktion. Vi skal også angive frø-og Trinværdier for at definere en identitetskonfiguration.
Vi kan ikke bruge S .l-IDENTITETSFUNKTION i en Select-sætning. Vi får følgende fejlmeddelelse.
MSG 177, niveau 15, stat 1, linje 2identitetsfunktionen kan kun bruges, når SELECT-sætningen har en into-klausul.,
lad os oprette en tabel ved hjælp af S .l SELECT INTO-sætningen med følgende forespørgsel.
når sætningen udføres, skal du kontrollere tabelegenskaberne ved hjælp af sp_help-kommandoen.
1
|
sp_help ‘TEMPTABLE’
|
Du kan se den IDENTITET kolonne i TEMPTABLE ejendomme som pr den angivne betingelser.,
lad os se på et andet eksempel. Udfør følgende kommando.,
1
2
3
4
5
|
VÆLG en IDENTITET( INT, 100, 2) SOM NEW_ID,
ID
Navn
I temp2
FRA employeedata;
|
Vi har allerede IDENTITET kolonne i EmployeeData bordet. Den nye tabel temp2 arver også kolonnen identitet., Vi kan ikke have flere IDENTITETSKOLONNER i en tabel. På grund af dette får vi følgende fejlmeddelelse.
MSG 8108, niveau 16, stat 1, linje 1Cannot Tilføj identitetskolonne ved hjælp af SELECT INTO-sætningen til tabel ‘temp2’, som allerede har kolonne ‘ID’, der arver identitetsegenskaben.
Oversigt
- SQL IDENTITET Funktioner SCOPE_IDENTITY, IDENT_CURRENT, og @@IDENTITET returnerer lignende output for en IDENTITET kolonner i den aktuelle session
- SCOPE_IDENTITY returnerer værdier under det nuværende anvendelsesområde alene., Vi kan definere anvendelsesområdet som et modul, der er Lagret procedure, der udløser eller en funktion
- IDENT_CURRENT funktion returnerer identitet værdi for en bestemt tabel om en forbindelse, som ændret værdi
- Vi kan bruge SQL IDENTITET funktion til at definere vores IDENTITET i en tabel, der er oprettet ved hjælp af SQL SELECT-sætning TIL sætning
Konklusion
havde I denne artikel, vi udforskede Identitet funktioner i SQL Server. Vi skal være bekendt med funktionerne til at bruge dem skriftligt t-s .l-forespørgsler. Hvis du har kommentarer eller spørgsmål, er du velkommen til at forlade dem i kommentarerne nedenfor.,
- Forfatter
- Seneste Indlæg
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne, med hans 50-del serie om SQL Server Altid På Tilgængelighed Grupper. Baseret på hans bidrag til S .l Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “årets bedste forfatter” kontinuerligt i 2020 og 2021 på s .lshack.,
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning om ethvert emne, der er dækket i hans skrifter, kan han kontaktes på rajendra.gupta16@Gmail.,com
Vis alle indlæg af Rajendra Gupta
- Udfører mindre og større version opgraderinger til AWS RDS SQL Server – januar 29, 2021
- Implementering AWS RDS-PostgreSQL tilfælde – januar 27, 2021
- overfør dine on-premises SQL-databaser til at AWS RDS SQL Server ved hjælp af AWS DMS – 25 januar 2021