Sorok beillesztése egy olyan táblázatba, amely automatikusan növekvő mezőt tartalmaz

Számos kereskedelmi termék lehetővé teszi az automatikus növekményes oszlopok használatát a táblázatokban, pl. mezők, amelyek értékét automatikusan új rekordok hozzáadásakor generálják. Az ilyen oszlopokat széles körben használják a táblázat elsődleges kulcsaként. automatikusan biztosítják az egyediséget. Egy tipikus példa a oszlopon ilyen típusú a soros számláló, amely generálja behelyezésekor a karakterlánc értékét eggyel nagyobb, mint az előző érték (kapott érték behelyezésekor az előző sor).

Az alábbi példa egy olyan táblázat létrehozása, amelyhez egy automatikus növekményes oszlop (kód) tartozik az MS SQL Server rendszerben.

CREATE TABLE [Printer_Inc] ([kód] [int] IDENTITY (1,1) elsődleges kulcs. [Model] [varchar] (4) NOT NULL. [Szín] [char] (1) NOT NULL. [Type] [varchar ] (6) NEM NULL. [Ár] [float] NOT NULL)

Az automatikusan növekvő mezőt az IDENTITY konstrukció (1, 1) határozza meg. Ebben az esetben az IDENTITY tulajdonság (1) első paramétere meghatározza, hogy a számlálás melyik értékből induljon ki, és a második - milyen lépést fog használni az érték növelése érdekében. Így példánkban az első beillesztett rekordnak értéke 1 a kódoszlopban, egy második bejegyzés 2-ben és így tovább.

Mivel a kódmezőben lévő érték automatikusan létrejön, az operátor

INSERT INTO Printer_Inc VALUES (15, 3111, 'y', 'laser', 2599);

hibát eredményez, még akkor is, ha nincs olyan vonal a táblázatban, amelynek értéke a kódmezőben. 15. Ezért egy sor beillesztése a táblázatba, egyszerűen nem adjuk meg ezt a mezőt pontosan úgy, mint az alapértelmezett érték használata esetén.

INSERT INTO Printer_Inc (modell, szín, típus, ár) VALUES (3111, 'y', 'laser', 2599);

Ennek eredményeképpen a színes lézernyomtató 3111 modelljének adatai, amelyek költsége 2599 dollár, beillesztésre kerülnek a Printer_Inc táblába. A mező kódban egy olyan érték lesz, amely csak egyenlő 15-vel. A legtöbb esetben ez elég, mert az automatikusan növekvő mező értéke általában nem hordoz semmilyen információt; a legfontosabb az, hogy egyedinek kell lennie.

Vannak azonban esetek, amikor egy nagyon specifikus értéket kell helyettesíteni az auto-incremented mezőben. Például át kell adnia a meglévő adatokat egy újonnan létrehozott struktúrába; míg ezek az adatok az "egy" oldalról egy-sok kapcsolatra vonatkoznak. Így nem engedhetjük meg az önkényességet. Másrészt nem szeretnénk lemondani az automatikusan növekvő mezőről, mert Ez egyszerűsíti az adatfeldolgozást az adatbázis következő működésében.

Mivel a standard SQL nyelv nem veszi figyelembe az automatikus növekményes mezők jelenlétét, ennek megfelelően nincs egységes megközelítés. Itt bemutatjuk, hogy ez hogyan valósul meg az MS SQL Server alkalmazásban. operátor

kikapcsolja (BE) vagy engedélyezi (OFF) az automatikus növekmény használatát. Ezért a kódmezőben 15 karakterből álló karakterláncot kell beilleszteni. meg kell írni

SET IDENTITY_INSERT Printer_Inc ON; INSERT INTO Printer_Inc (kód, modell, szín, típus, ár) VALUES (15, 3111, 'y', 'lézer', 2599);

Ne feledje, hogy az oszlopok listája ebben az esetben kötelező, azaz. nem írhatunk így:

SET IDENTITY_INSERT Printer_Inc ON; INSERT INTO Printer_Inc VALUES (15, 3111, 'y', 'laser', 2599);

semmi esetre sem

SET IDENTITY_INSERT Printer_Inc ON; INSERT INTO Printer_Inc (modell, szín, típus, ár) VALUES (3111, 'y', 'laser', 2599);

Az utóbbi esetben a hiányzó oszlop kódjában lévő érték nem helyettesíthető automatikusan, mert Az automatikus növekmény le van tiltva.

Fontos megjegyezni, hogy ha az érték 15 lenne a legmagasabb az alábbi oszlopban kódot, majd folytassa a számozás folytatja értékekkel 16. Persze, ha tartalmazza avtoinkrementirovanie: SET IDENTITY_INSERT Printer_Inc OFF.

Végül vegye fontolóra egy példát arra, hogy az adatokat a Termék táblából a Product_Inc táblába helyezze be. a kódban lévő értékek mentése:

SET IDENTITY_INSERT Printer_Inc ON; INSERT INTO Printer_Inc (kód, modell, szín, típus, ár) SELECT * FROM Printer;

Ami az automatikusan növekvő oszlopokat illeti, az alábbiakat is meg kell mondani. Hagyja, hogy a kódmező utolsó értéke legyen 16, amely után az ezzel az értékkel rendelkező sort törölték. Milyen érték jelenik meg ebben az oszlopban az új sor beillesztése után? Jól van, 17, mert A számláló utolsó értéke megmarad, annak ellenére, hogy eltávolítja az azt tartalmazó sort. Ezért a sorok törlésének és hozzáadásának eredményeként megadott értékek számozása nem lesz konzisztens. Ez egy másik ok egy sor megadott értékű (hiányzó) érték beillesztésére az automatikus növekmény oszlopban.