sql >> Databasteknik >  >> RDS >> Sqlserver

Introduktion till SQL Server Identity

I den här artikeln kommer vi att utforska grunderna och detaljerna för SQL Server IDENTITY-egenskapen och IDENTITY-kolumnfunktionerna. Vi kommer också att överväga hur man infogar explicita värden i identitetskolumnerna genom funktionen IDENTITY_INSERT.

Introduktion till SQL Server IDENTITY-egenskap och IDENTITY-kolumn

I SQL Server tillåter identitetsegenskapen oss att skapa identitetskolumner i SQL Server-tabellerna enligt inställningarna för identitetsegenskapens syntax. Syntaxen för identitetsegenskapen ser ut som följer, och vi använder denna syntax för att skapa eller ändra en tabellsats.

IDENTITET [(frö, ökning)]

Till en början kommer vi att undersöka parametrarna för identitetsegenskapen. Den här egenskapen tar två ingångsparametrar:den första är seed och den andra är inkrement. Seed-parametern anger att det första startvärdet för det infogade värdet i tabellen och Increment-parametern definierar inkrementvärdet för de infogade data.

Nu kommer vi att intensifiera denna principiella definition av identitetsegenskap med några exempel.

Hur man skapar identitetskolumnen i SQL Server

Exempel-1 :I följande exempel skapar vi en identitetskolumn och det första värdet börjar från 1 och ökar 1 med 1.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES ('Den första infogade raden')INSERT INTO TestIdentityserted INTO ANDRA')INSERT INTO RADEN') TestIdentityVALUES ('Den tredje infogade raden')INSERT INTO TestIdentityVALUES ('Den fjärde infogade raden')VÄLJ ID som [IdentityColumn],Col1 FROM TestIdentity

Exempel-2 :I följande exempel kommer vi att skapa en identitetskolumn och det första värdet börjar från 37 och ökar 20 med 20.

SLIP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(37,20) ,Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES ('Den första infogade raden')INSERT INTO TestIdentity'second. TestIdentityVALUES ('Den tredje infogade raden')INSERT INTO TestIdentityVALUES ('Den fjärde infogade raden')VÄLJ ID som [IdentityColumn],Col1 FROM TestIdentity

Som du kan se i exemplet ovan tillhandahåller identitetsegenskapen generering av de automatiska ökningsvärdena enligt frö- och identitetsparametrar.

Hur infogar man explicita värden i SQL Server-identitetskolumnen?

Som standard tillåter inte identitetsegenskapen oss att infoga explicita värden i identitetskolumnerna. Om du försöker infoga explicita värden i en identitetskolumn kommer du att uppleva följande fel.

SLIP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES (1,'Den första infogade raden')

Msg 8101, Level 16, State 1, Line 9
Ett explicit värde för identitetskolumnen i tabell, 'TestIdentity' kan endast anges när en kolumnlista används och IDENTITY_INSERT är PÅ.

Vi kan övervinna detta fel genom att aktivera funktionen IDENTITY_INSERT i tabellen. Nu kommer vi att ändra insert-satsen enligt följande.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id,Col1) VALUES (1,'ENTED INSERTSET ID_INSERT') TestIdentity OFFSELECT * FRÅN TestIdentity

En annan viktig punkt i denna fråga är att vi måste skriva en kolumnlista för att infoga uttalandet. Om vi ​​inte gör detta kommer vi att uppleva följande fel.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity VALUES (1,'Den första insatta test-IDENTITY_tINSERT raden> 

Msg 8101, Level 16, State 1, Line 9
Ett explicit värde för identitetskolumnen i tabell, 'TestIdentity' kan endast anges när en kolumnlista används och IDENTITY_INSERT är PÅ.

Det här felet definierar att kolumnlistan saknas i insert-satsen. I infogningssatsen nedan kommer vi att åtgärda detta fel.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id,Col1) ---kolumnen listade,Den första raderna (9 ')STÄLL IN IDENTITY_INSERT TestIdentity AV

I vissa fall måste vi infoga data i en tabell från en annan tabell. Ett av de bästa sätten att utföra denna operation är att använda "INSERT INTO SELECT"-satserna. Men om måltabellen har en identitetskolumn måste vi aktivera alternativet IDENTITY_INSERT i måltabellen. Vi måste också skriva kolumnlistan för måltabellen.

SLIPTA TABELL OM FINNS TestIdentityDROPP TABELL OM FINNS Källtabell SKAPA TABELL Källtabell (ID INT,Val1 VARCHAR(100))INSERT I KälltabellsVÄRDEN (1,'Första raden'),(2,'Andra raden')GOC ID INT IDENTITY(1,1) ,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id,Col1) SELECT * FROM SourceTableSET IDENTITY_INSERT TestIdentity OFF

Nackdelen med alternativet IDENTITY_INSERT är att det kan orsaka ett gap mellan identitetskolumnens värden. Ett uttalande som liknar följande kommer att generera ett gap mellan identitetskolumnens värden.

SLIPTA TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))INSERT INTO TestIdentity ---column listVALUES ('Den första infogade raden (INDENTITY_INSERTIDENTITY_TINSERTON INSERTIDENTITY_tINSERTON) TestIdentity (Id,Col1) ---column listVALUES (90,'Den andra infogade raden (INDENTITY_INSERT_ON')SET IDENTITY_INSERT TestIdentity OFFINSERT INTO TestIdentity ---column listVALUES ('Den tredje infogade raden (INDENTITY_INSERT_TestI_OFF)' /pre> 

DBCC CHECKIDENT kommando

Kommandot DBCC CHECKIDENT låter oss få detaljer om identitetskolumns sista värde. Denna funktion gör det också möjligt att återställa och ändra det aktuella värdet för identitetskolumnen till ett annat värde. Nu kommer vi att få det sista värdet på identiteten genom kommandot DBCC CHECKIDENT.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES ('Den första infogade raden')INSERT INTO TestIdentityserted INTO ANDRA')INSERT INTO RADEN') TestIdentityVALUES ('Den tredje infogade raden')INSERT INTO TestIdentityVALUES ('Den fjärde infogade raden')DBCC CHECKIDENT ('TestIdentity', NORESEED)

Ett annat alternativ med kommandot DBCC CHECKIDENT är att återställa identitetskolumnen till ett önskat värde. I följande exempel ändrar RESEED-parametern maxvärdet för identitetskolumnen till 100 och de efterföljande infogade värdena använder detta maxvärde.

SLÄPP TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES ('Den första infogade raden')INSERT INTO TestIdentityserted INTO ANDRA')INSERT INTO RADEN') TestIdentityVALUES ('Den tredje infogade raden')INSERT INTO TestIdentityVALUES ('Den fjärde infogade raden')GODBCC CHECKIDENT ('TestIdentity',RESEED,100)GOINSERT INTO TestIdentityVALUES ('Den femte infogade raden')Pressidentitet*FRÅN 

SQL Server identitetskolumn och unikhet

Identitetskolumner garanterar inte genereringen av unika värden. Detta är den vanliga förvirrande frågan om identitetskolumner, så om vi vill säkerställa unikheten hos de genererade värdena kan vi använda det unika indexet för dessa kolumner. Nu ska vi bevisa och demonstrera hur man skapar dubbletter av värden över identitetskolumnerna.

SLIPTA TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) ,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id,Col1)VALUES (1,'Den första raden_INSERT (INDENT) )INSERT INTO TestIdentity (Id,Col1)VALUES (1,'Den första infogade raden (INDENTITY_INSERT_OFF)')SET IDENTITY_INSERT TestIdentity OFFSELECT * FROM TestIdentity

Dessutom är identitetskolumner och primärnycklar två olika objekt i SQL Server. Användningssyftet med identitetskolumnen är att generera det automatiskt inkrementerade numret. Å andra sidan garanterar och ger den primära nyckelbegränsningen unikheten hos värdena i en viss kolumn. Primärnyckelns begränsning tvingar fram de unika värdena för de definierade kolumnerna eftersom primärnyckeln som standard skapar ett klustrat unikt index i tabellen. Vid vanlig användning kan primärnyckelbegränsningen och identitetsegenskapen användas tillsammans. Denna användningsmetod hjälper oss att föra flexibiliteten i den unika primärnyckeln och funktionen för automatisk ökning av identiteten till den tillämpade kolumnen. I följande exempel kommer vi också att lägga till en primärnyckelrestriktion till Id-kolumnen och det kommer att förhindra att duplicerade infogade värden.

SLIPPA TABELL OM FINNS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) PRIMARY KEY,Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id,Col1)VALUES inERT_ENTITY (1, )')INSERT INTO TestIdentity (Id,Col1)VALUES (1,'Den första infogade raden (INDENTITY_INSERT_OFF)')SET IDENTITY_INSERT TestIdentity OFFSELECT * FROM TestIdentity

När vi navigerar på fliken Index i TestIdentity-tabellen i objektutforskaren kan vi ta reda på ett unikt klustrat index som skapats av primärnyckelbegränsning. Denna begränsning tvingar fram unika värden för Id-kolumnen.

Slutsats

I den här artikeln diskuterade vi de grundläggande begreppen och användningsmetoderna för SQL Server Identity-egenskap och Identity-kolumner.

Referenser

  • SKAPA TABELL (Transact-SQL) IDENTITET (Egenskap)
  • Skapa primära nycklar

  1. Summa kolumner med nollvärden i oracle

  2. Problemet med förlorad uppdatering i samtidiga transaktioner

  3. Hur anger man specialtecken som &i Oracle-databasen?

  4. Ta dumpning av bord i oracle 10g med PL/SQL-proceduren