ПредишенСледващото

Много търговски продукти позволяват да използвате автоматично инкрементиране колоните в таблиците, т.е. полета, чиято стойност се генерира автоматично при добавяне на нови записи. Тези колони са широко използвани като първичен ключ на таблицата, тъй като те автоматично се осигури уникалност. Типичен пример на колона от този тип е сериен брояч, който генерира при поставяне стойност низ една по-голяма от предишната стойност (стойност, получена при вкарване на предишния ред).

Следното е пример за създаване на маса с колона автоматично нарастване (код) на MS SQL Server.

Създаване на таблица [Printer_Inc] ([код] [Int] ИДЕНТИЧНОСТ (1,1) първичен ключ. [Модел] [VARCHAR] (4) НЕ NULL. [Color] [овъгляване] (1) НЕ NULL. [Type] [VARCHAR ] (6) НЕ NULL. [цена] [поплавък] НЕ NULL)

Поле се определя от ИДЕНТИЧНОСТ структура автоматично нарастване (1, 1). Където настройка ИДЕНТИЧНОСТ първи имот (1) определя кои ценности ще започнат броенето, а вторият - коя стъпка ще се използва за нарастване ценности. По този начин, в нашия пример, първият запис ще бъде въведена в стойността на колона код е 1, а вторият - 2, и т.н.

Тъй като стойността на код поле се генерира автоматично, операторът

Поставете в Printer_Inc стойности (15, 3111, "Y", "лазерни", 2599);

ще се провали, дори ако масата не е в съответствие със стойността на кода на полето. равно на 15. Поради това, по същия начин, както в случая на използване на стойността по подразбиране за вмъкване на редове в таблица просто няма да посочите тази област, т.е.

Поставете в Printer_Inc (модел, цвят, вид, цена) стойности (3111, "Y", "лазер", 2599);

В резултат на този оператор в Printer_Inc маса ще бъде включен в информацията за модел 3111 цветен лазерен принтер, цената на който е $ 2599. В кода ще бъде стойността, която може само от време на време да бъде равна на 15. В повечето случаи, това е достатъчно, тъй като стойността на областта за автоматично увеличение, като правило, не носят никаква информация; най-важното, че е уникален.

Въпреки това, има моменти, когато трябва да се замени с много специфично значение в областта на авто-увеличение. Например, искате да прехвърлите съществуващите данни в новосъздадените структури; докато данните, включени в съобщението, "един към много" страна "онзи". По този начин, ние не можем да позволим произвол тук. От друга страна, ние не искаме да се откаже поле автоматично увеличение, тъй като опростява обработката на данните при последващото функциониране на базата данни.

Тъй като SQL стандарта не предполага наличието на полета автоматично инкрементиране, съответно, и няма нито един подход. Тук ние показваме как се прилага в MS SQL Server. оператор

деактивира (стойност) или съдържа (OFF) използване autoincrement. Ето защо, за да вмъкнете ред със стойност от 15 в полето за кода. вие трябва да напишете

SET IDENTITY_INSERT Printer_Inc ON; Поставете в Printer_Inc (код, модел, цвят, вид, цена) стойности (15, 3111, "Y", "лазер", 2599);

Имайте предвид, че списъка на колони в този случай е задължително, т.е. ние не можем да напишете:

SET IDENTITY_INSERT Printer_Inc ON; Поставете в Printer_Inc стойности (15, 3111, "Y", "лазерни", 2599);

и още по-малко

SET IDENTITY_INSERT Printer_Inc ON; Поставете в Printer_Inc (модел, цвят, вид, цена) стойности (3111, "Y", "лазер", 2599);

В последния случай, пропуснатата стойност колона код не може да бъде заместен автоматично, тъй като avtoinkrementirovanie забранено.

Важно е да се отбележи, че ако на стойност 15 ще бъде най-високата в колоната по-долу код, а след това продължи номерация ще продължи със стойности 16. Разбира се, ако включите avtoinkrementirovanie: SET IDENTITY_INSERT Printer_Inc OFF.

И накрая, помислете примера на въвеждането на данни от таблицата на продукта в таблицата Product_Inc. запазване на стойности в поле код:

SET IDENTITY_INSERT Printer_Inc ON; Вмъкнете в Printer_Inc (код, модел, цвят, вид, цена) SELECT * FROM принтер;

Що се отнася до колоните автоматично инкрементиране все пак трябва да кажа това. Нека последната стойност в кода е равно на 16, а след това съответствие с тази стойност е била отстранена. Каква стойност ще тази колона след поставяне на нова линия? Това е така, защото 17 последната стойност на брояча продължава въпреки отстраняването линия, която го съдържа. Затова номериране ценности чрез премахване и добавяне на струни, няма да бъдат съгласувани. Това е още една причина за вмъкване на предварително определен ред (пропусната) стойността в колоната за автоматично увеличение.

Подкрепете проекта - споделете линка, благодаря!