Помощ - по - SQL (ГСД), как да добавите нова графа в таблицата между съществуващите колони

Това не е първият път, когато се срещнат на въпрос във форумите за това как да се добави нова графа в определено място на съществуваща таблица, например, между Първата и втората колона. Този наивен по отношение на релационния модел въпрос, обаче, има известен смисъл от гледна точка на езика SQL на.

Казвам "наивна", защото по дефиниция атрибутите на отношенията не са подредени, а призив към стойностите на атрибута се извършва от името му, но не и от позиция. Що се отнася до езика SQL, колоните в таблицата са от поръчката, която е посочена в декларацията Създаване на таблица. Ню същото колона, която се добавя с помощта на отчета за ALTER TABLE,. Това става последният в таблицата. Т.е. SQL стандарт не предвижда възможност за директно добавяне на колона с конкретна позиция в списъка на колони.

Това е справедливо да се каже, че някои реализации на SQL стандартен език разширяват в това отношение. Така например, в MySQL в отчета за ALTER TABLE, можете да определите позицията на добавена колона (нова колона може да бъде първият, или след определен колоната).

Друг въпрос е, защо е необходимо? Не мога да мисля за такъв вариант. Например, клиентското приложение се използва за генериране на отчети, като например заявка

Ако искате да добавите таблица Служители за повече информация за служителите, които логично трябва да са на определено място (например, име директно между първото и последното име), вместо да прави промени в клиентски приложения, тя може да бъде по-лесно да се промени структурата на таблицата на работниците и служителите.

Така че, има маса Служителите, която е създадена със следното твърдение:

Сега искаме да добавите колона middle_name (MI) между колоните first_name и last_name.

В MySQL, това може да се направи, просто:

така че е невъзможно да се направи в SQL Server, но можете да използвате следния алгоритъм:

Показани са оператори T-SQL. че прилагането на този алгоритъм.

Имайте предвид, че middle_name колона позволява NULL-стойности. Ние не можем да добавите колона, за да съществуваща таблица (или, както е в нашия случай, без да се уточнява стойността за тази колона при копиране на данни от таблицата Служители в Emp_temp маса), ако тя няма стойност по подразбиране. Тук ние приемаме NULL по подразбиране.

Ние можем да постигнем първите две стъпки в една стъпка, използвайки израза SELECT INTO. че "в движение" създава нова таблица:

CAST оператор ни позволява веднага да посочите желания тип на добавената колона. Типовете останалите колони наследяват от таблицата източник.

Ако искате да изпробвате най-новите сценария е таблица, в първоначалното му състояние чрез премахване добавили колона:

Имайте предвид, че при използване на отчета за SELECT INTO е загубени ключове. Така че трябва да добавите основен ключ ограничение (първичен ключ), или във временен маса или в преименувана вече да получите точно желания структура:

Аналогично може да се прилага за преместване на съществуващи колони. В допълнение към тази причина такава пермутация може да подобри производителността, свързан с намаляване на количеството данни, записани в регистъра на операциите, в някои изпълнения. Това се дължи на специфичните за обработка на редовете на фиксирана и променлива дължина. Ето някои препоръки по този въпрос дава Джо Selko *:

"Първо място рядко се обновява колони с фиксирана дължина;
"След това поставете рядко обновяват колони с различна дължина;
"Последното място, често се актуализират колони;
"Сложете няколко колони, които обикновено се актуализират в същото време.