Dit artikel verkent de Identity function in SQL Server met voorbeelden en verschillen tussen deze functies.
overzicht van IDENTITEITSKOLOMMEN
In SQL Server maken we een identiteitskolom om incrementele waarden automatisch te genereren. Het genereert waarden op basis van vooraf gedefinieerde zaad (initiële waarde) en stap (increment) waarde. Stel bijvoorbeeld dat we een Employee table hebben en we willen EmployeeID automatisch genereren., We hebben een beginnende werknemer ID 100 en verder willen verhogen elke nieuwe EmpID door een. In dit geval moeten we de volgende waarden definiëren.
- Seed: 100
- Stap: 1
laten we een paar records in deze tabel invoegen en de records bekijken.
u kunt zien dat de eerste werknemer een ID waarde 100 krijgt en elke nieuwe record ID waarde krijgt een toename van één.
we hebben een paar nuttige Identiteitsfuncties in SQL Server om te werken met de IDENTITEITSKOLOMMEN in een tabel. Laten we de volgende IDENTITEITSFUNCTIES verkennen met voorbeelden.,
- SQL @@IDENTITY Function
- SQL SCOPE_IDENTITY () Function
- SQL identity Function
- SQL IDENTITY Function
SQL @@IDENTITY Function
we gebruiken system function @@IDENTITY om de maximale gebruikte IDENTITEITSWAARDE in een tabel voor de kolom identiteit onder de huidige sessie te retourneren. Zodra we een rij in een tabel invoegen, geeft de kolom @@IDENTITY functie de IDENTITEITSWAARDE die door het statement wordt gegenereerd. Als we een query uitvoeren die geen IDENTITEITSWAARDEN genereerde, krijgen we een NULL-waarde in de uitvoer., De SQL @@IDENTITY draait onder de scope van de huidige sessie. We kunnen het niet gebruiken op een externe of gekoppelde server.
laten we het begrijpen met het volgende voorbeeld.
- Stap 1: We hebben een huidige maximale identiteitswaarde 110 in EmployeeData table
- Stap 2: in de huidige sessie voegen we een record in de EmployeeData table., Het verhoogt de identiteitswaarde met één
- Stap 3: We kunnen controleren of de maximaal gebruikte identiteitswaarde 111
- Step4: we gebruiken de functie select @@IDENTITY in de huidige sessie om de identiteitswaarde gegenereerd in deze sessie te krijgen
laten we meerdere records in deze tabel invoegen en de SELECT @@IDENTITY uitvoeren.
als we meerdere records invoegen in een sessie, selecteert @@Identity de maximale IDENTITEITSWAARDE die in deze sessie is gegenereerd., In het volgende voorbeeld voegen we drie records in en het verhoogt IDENTITEITSWAARDEN met drie van de huidige identiteitswaarde 111.
als het statement geen identiteitswaarden genereerde, geeft het nulwaarden terug in de uitvoer.
SQL SCOPE_IDENTITY() functie
we gebruiken de functie SCOPE_IDENTITY() om de laatste IDENTITEITSWAARDE in een tabel te retourneren onder de huidige scope. Een scope kan een module, trigger, functie of een opgeslagen procedure zijn., We kunnen sql SCOPE_IDENTITY() functie als vergelijkbaar beschouwen met de @@IDENTITY functie, maar het is beperkt tot een specifieke scope. Het Retourneert de NULL waarde als deze functie betrokken is voordat een insert statement waarde genereert onder dezelfde scope.
in het volgende voorbeeld zien we dat zowel de @ @ IDENTITY als SCOPE_IDENTITY () dezelfde waarde retourneren in de huidige sessie en soortgelijke scope.
laten we het verschil tussen SCOPE_IDENTITY() en @@IDENTITY met een ander voorbeeld begrijpen.,
laten we eens kijken we hebben twee tabellen EmployeeData en afdelingen tabel. We maken een insert trigger op de EmployeeData table. Zodra we een Rij invoegen op EmployeeData, roept het naar gedefinieerde trigger voor het invoegen van een rij in afdelingen.
in de volgende query maken we een trigger om de standaardwaarde ‘IT’ in te voegen in de afdelingstabel voor elke insert in de EmployeeData tabel.,f7″>
1
2
3
4
5
6
|
CREATE TRIGGER T_INSERT_DEPARTMENT
OP EmployeeData
INVOEGEN ALS
BEGIN
INVOEGEN Afdelingen WAARDEN (‘HET’)
END;
|
Laten we het invoegen van de waarde in de gegevens van Werknemers tabel en bekijk de uitvoer van zowel @@IDENTITEIT en SCOPE_IDENTITY() functies.,
in de huidige sessie hebben we gegevens ingevoegd in de tabel met gegevens over werknemers. Het genereert een identiteit in deze tabel. De identiteit seed waarde is 1 voor de EmployeeData tabel.
zodra we waarde invoegen in de EmployeeData tabel, start het een trigger om waarde in te voegen in de afdelingen tabel. De identiteit seed waarde is 100 voor de afdelingen tabel.
- We krijgen de output 100 voor de SELECT @@IDENTITY functie
- SCOPE_IDENTITY functie retourneert alleen de identiteitswaarde onder de huidige scope., Het geeft output 1 voor deze functie
SQL IDENT_CURRENT() functie
we gebruiken de functie IDENT_CURRENT om de laatste IDENTITEITSWAARDE te retourneren die is gegenereerd voor een opgegeven tabel onder elke verbinding. Er wordt geen rekening gehouden met de reikwijdte van de SQL-query die identiteitswaarde genereert. We moeten de tabel specificeren waarvoor we de identiteitswaarde willen controleren.
in de volgende schermafbeelding kunnen we zien dat we gegevens in sessie id 64 invoegen en dat het identiteitswaarde 2 genereert in de EmployeeData tabel.,
we kunnen in een ander verbindingsvenster de huidige identiteits waarde voor de EmployeeData tabel controleren en dezelfde uitvoer krijgen als identiteits waarde 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., We kunnen de SQL IDENTITY-functie gebruiken om identiteitswaarden in te voegen in de tabel die is gemaakt door SQL SELECT in statement.
als een brontabel een identiteitskolom bevat, dan wordt deze standaard overgenomen door de tabel die is gemaakt met een select in statement. Overweeg een scenario waarin u een tabel wilt maken met behulp van de SELECT INTO statement uit de uitvoer van een weergave of join uit meerdere tabellen. In dit geval wilt u ook een identiteitskolom in een nieuwe tabel maken.,
- Note: SQL IDENTITY function is anders dan de Identity property die we gebruiken tijdens het aanmaken van een tabel.
We moeten een gegevenstype opgeven voor een kolom om de SQL-Identiteitsfunctie te gebruiken. We moeten ook SEED-en Step-waarden specificeren om een identiteitsconfiguratie te definiëren.
We kunnen de SQL IDENTITY-functie niet gebruiken in een SELECT statement. We krijgen de volgende foutmelding.
MSG 177, Level 15, status 1, regel 2de IDENTITEITSFUNCTIE kan alleen worden gebruikt als het SELECT statement een into-clausule heeft.,
laten we een tabel maken met het SQL SELECT INTO statement met de volgende query.
controleer de Tabeleigenschappen met het commando sp_help zodra het statement wordt uitgevoerd.
1
|
sp_help ‘TEMPTABLE’
|
U kunt de IDENTITEIT van de kolom in de TEMPTABLE eigenschappen als per de opgegeven voorwaarden.,
laten we een ander voorbeeld bekijken. Voer het volgende commando uit.,
1
2
3
4
5
|
SELECTEER IDENTITEIT( INT, 100, 2) ALS NEW_ID,
ID
Naam
IN temp2
VAN employeedata;
|
We hebben al de IDENTITY kolom in de EmployeeData tabel. De nieuwe tabel temp2 erft ook de kolom identiteit., We kunnen niet meerdere IDENTITEITSKOLOMMEN in een tabel hebben. Hierdoor krijgen we de volgende foutmelding.
Msg 8108, Level 16, State 1, Line 1Cannot identity column toevoegen, met behulp van de SELECT INTO statement, aan tabel ‘temp2’, die al kolom ‘ID’ heeft die de identity property erft.
Summary
- SQL IDENTITY Functions SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY retourneert vergelijkbare uitvoer voor een IDENTITEITSKOLOMMEN in de huidige sessie
- SCOPE_IDENTITY retourneert alleen waarden onder de huidige scope., We kunnen scope definiëren als een module, opgeslagen procedure, trigger of een functie
- IDENT_CURRENT functie retourneert identiteitswaarde voor een opgegeven tabel met betrekking tot een verbinding die de waarde
- wijzigde.we kunnen de SQL IDENTITY functie gebruiken om identiteit te definiëren in een tabel die is gemaakt met SQL SELECT in statement
conclusie
had in dit artikel de Identiteitsfuncties in SQL Server onderzocht. We moeten bekend zijn met de functies om ze te gebruiken bij het schrijven van T-SQL queries. Als u opmerkingen of vragen, voel je vrij om ze te verlaten in de reacties hieronder.,
- Auteur
- Laatste Berichten
hij is de maker van een van de grootste gratis online collecties van artikelen over een enkel onderwerp, met zijn 50-delige serie op SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server community, werd hij in 2020 en 2021 bij SQLShack onderscheiden met verschillende prijzen, waaronder de prestigieuze “beste auteur van het jaar”.,Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt over een onderwerp dat in zijn geschriften wordt behandeld, kan hij worden bereikt in rajendra.gupta16@gmail.,com
Bekijk alle berichten van Rajendra Gupta
- Uitvoeren van kleine en grote versie-upgrades voor AWS RDS-SQL Server – januari 29, 2021
- het Implementeren van AWS RDS-PostgreSQL gevallen, 27 januari 2021
- het Migreren van uw lokale SQL-databases naar AWS RDS SQL Server met behulp van AWS DMS – januari 25, 2021