Computed_column_definition (Transact-SQL), Microsoft Docs

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

Прилага се за следните обекти : SQL Server (SQL Server 2008 до текущата версия), Windows Azure SQL база данни (първоначална версия до текущата версия).

Синтактични означения в Transact-SQL

column_name Името на колоната, която ще бъде модифицирана, добавена или премахната. Името column_name може да бъде с дължина от 1 до 128 знака. За нови колони аргументът column_name може да бъде пропуснат за колони с клеймо за време. Ако column_name не е посочено за колона от тип данни timestamp, тогава се използва името на timestamp.

computed_column_expression Израз, който дефинира стойността на изчислена колона. Изчисляваната колона е виртуална колона, която не се съхранява физически в таблица, но се изчислява с помощта на някакъв израз, който използва други колони в таблицата. Например изчислена колона може да има следната дефиниция: себестойност КАТО цена * бр. Изразът може да бъде неизчислено име на колона, константа, функция, променлива или произволна комбинация от тях, съединени от един или повече оператори. Изразът не може да бъде подзаявка или да включва псевдоним на тип данни.

Изчисляваните колони могат да се използват в списъци за избор, клаузи WHERE и ORDER BY или навсякъде другаде, където могат да се използват регулярни изрази, освен в следните случаи.

Изчислявана колона не може да се използва като дефиниция на ограничение DEFAULT или FOREIGN KEY, нито във връзка с дефиниция на ограничение NOT NULL. Въпреки това, ако изчислената колона е дефинирана от детерминистичен израз и типът данни на резултата е разрешен за индексколони, тогава изчислената колона може да се използва като ключова колона в индекс или като част от ограничение PRIMARY KEY или UNIQUE.

Например, ако таблицата съдържа цели колони a и b, тогава изчислената колона a + b може да бъде индексирана, но изчислената колона a +DATEPART(dd, GETDATE()) може да не бъде индексирана, тъй като стойността може да се промени при всяко следващо извикване.

Изчислена колона не може да бъде целевата колона на оператор INSERT или UPDATE.

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

PERSISTED Указва, че Database Engine физически ще съхранява изчислените стойности в таблица и ще ги актуализира, когато се промени някоя колона, от която зависи изчислената колона. Маркирането на изчислена колона като ПОСТОЯННА ви позволява да създадете индекс върху детерминистична, но не точна изчислена колона. За повече информация вижте Изчислени индекси на колони. Всички изчислени колони, използвани в колоните за разделяне на разделена таблица, трябва да бъдат изрично маркирани като PERSISTED. Ако е указано PERSISTED, стойността на computed_column_expression трябва да бъде детерминистична.

NULL NOT NULL Показва дали нулевите стойности са разрешени за колоната. Клаузата NULL не е ограничение в строгия смисъл, но може да бъде определена по същия начин като NOT NULL. Ограничение NOT NULL може да бъде указано само върху изчисляеми колони, ако също е указана опцията PERSISTED.

ОГРАНИЧЕНИЕ Показва началото на дефиниция за ограничения PRIMARY KEY или UNIQUE.

име_на_ограничение Ново ограничение. Имената на ограниченията трябва да следват правилата за идентификатори, с изключение на това, че не могат да започват с цифров знак (#). Ако аргументът constraint_name не е указан, на ограничението се дава име, генерирано от системата.

ПЪРВИЧЕН КЛЮЧ Ограничение, което налага проверка на целостта на обекта на определената колона или колони, когато се използва уникален индекс. Само едно ограничение PRIMARY KEY може да бъде създадено на таблица.

UNIQUE Ограничение, което налага целостта на обекта за определената колона или колони чрез използване на уникален индекс.

CLUSTERED NONCLUSTERED Указва, че се създава клъстериран или неклъстериран индекс за ограничението PRIMARY KEY или UNIQUE. По подразбиране ограниченията на PRIMARY KEY са зададени на CLUSTERED. По подразбиране ограниченията UNIQUE са зададени на NONCLUSTERED.

Ако в таблицата вече е създадено клъстерирано ограничение или индекс, CLUSTERED не може да бъде зададен. Ако клъстерирано ограничение или индекс вече съществува в таблицата, ограниченията на PRIMARY KEY по подразбиране са NONCLUSTERED.

WITH FILLFACTOR =fillfactor Определя доколко SQL Server Database Engine трябва да запълни всяка индексна страница, използвана за съхраняване на индексни данни. Аргументът fillfactor може да бъде зададен от потребителя в диапазона от 1 до 100. Ако не е посочена стойност, стойността по подразбиране е 0.

Важно!

Описанието на WITH FILLFACTOR = fillfactor като единствен параметър на индекс, приложим към ограничения PRIMARY KEY или UNIQUE, е запазено за обратна съвместимост, но този израз ще се използва в бъдещи версииДруги опции за индексиране могат да бъдат посочени в клаузата index_option (Transact-SQL) на оператора ALTER TABLE.

FOREIGN KEY REFERENCES Ограничение, което налага референтна цялост за данните в тази колона или колони. Ограниченията на FOREIGN KEY изискват всяка стойност в колона да съществува в съответната свързана колона или колони в свързаната таблица. Ограниченията на FOREIGN KEY могат да се отнасят само до колони, които са PRIMARY KEY или UNIQUE ограничения в свързаната таблица, или към колони, които са посочени в UNIQUE INDEX на свързаната таблица. Външните ключове в изчисляемите колони също трябва да бъдат маркирани ПЪРВИ.

ref_table Име на таблицата, посочена от ограничението FOREIGN KEY.

(ref_column) Колона от таблицата, посочена от ограничението FOREIGN KEY.

БЕЗ ДЕЙСТВИЕ Двигателят на бази данни генерира грешка и операцията за изтриване на ред от родителската таблица се връща назад.

КАСКАДА Ако даден ред бъде изтрит от родителската таблица, съответните редове също се изтриват от референтната таблица.

Например в базата данни AdventureWorks2012 таблицата ProductVendor има референтна връзка с таблицата Vendor. Външният ключ ProductVendor.BusinessEntityID се отнася до първичния ключ Vendor.BusinessEntityID.

В противен случай, ако NO ACTION е зададено, Database Engine поражда грешка и връща обратно действието за изтриване на ред от таблицата Vendor, ако поне един ред в таблицата ProductVendor препраща към него.

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

НЕ Е ЗА РЕПЛИКАЦИЯ

Прилага се за следните обекти : SQL Server 2008 до SQL Server 2014.

Може да се дефинира за FOREIGN KEY и CHECK ограничения. Ако ограничение е придружено от тази клауза, то не се прилага, когато агентите за репликация изпълняват операции по вмъкване, актуализиране или изтриване.

ПРОВЕРКА Ограничение, което налага целостта на домейна чрез ограничаване на възможните стойности, които могат да бъдат въведени в колона или колони. Ограниченията CHECK на изчислените колони също трябва да бъдат маркирани като ПОСТЪПНИ.

logical_expression Логически израз, който връща TRUE или FALSE. Изразът не може да съдържа препратка към псевдоним на тип данни.

Прилага се за следните обекти : SQL Server 2008 до SQL Server 2014.

Указва къде да се съхранява индексът, създаден за ограничението. Ако е посочен аргументът partition_scheme_name, индексът се разделя на дялове, които се нанасят на файловите групи, посочени от аргумента partition_scheme_name. Ако е посочен аргументът файлова група, индексът се създава в наименуваната файлова група. Ако е указан аргументът "по подразбиране" или клаузата ON изобщо не е дефинирана, индексът се създава в същата файлова група като таблицата. Ако е посочена клауза ON за ограничение PRIMARY KEY или UNIQUE при добавяне на клъстериран индекс, тогава цялата таблица се премества в указаната файлова група по време на създаването на индекса.

В този контекст по подразбиране не е ключова дума. Това е идентификаторът на файловата група по подразбиране и трябва да бъде разграничен като в ON „по подразбиране“ или ON [по подразбиране]. Ако е указано „по подразбиране“, тогава QUOTED_IDENTIFIERтекущата сесия трябва да бъде включена. Това е настройката по подразбиране. За повече информация вижте SET QUOTED_IDENTIFIER (Transact-SQL).

Всяко ограничение PRIMARY KEY или UNIQUE създава индекс. Броят на ограниченията UNIQUE и PRIMARY KEY не може да надвишава ограничението за индекс на таблица от 999 неклъстерирани индекса и 1 клъстерен индекс.