Table_constraint (transact-sql)

Вказує початок визначення обмежень PRIMARY KEY, UNIQUE, FOREIGN KEY і CHECK, а також пропозиції DEFAULT.

Ім'я обмеження. Імена обмежень повинні підкорятися правилам для ідентифікаторів. за винятком того, що не можуть починатися зі знака числа (#). Якщо аргумент constraint_name не вказано, то обмеження присвоюється ім'я, що формується системою.

Обмеження, яке виконує примусову перевірку цілісності сутностей для зазначеного стовпця або стовпців при використанні унікального індексу. Для кожної таблиці може бути створене тільки одне обмеження PRIMARY KEY.

Обмеження, що забезпечує цілісність сутностей для зазначеного стовпця або стовпців при використанні унікального індексу.

Вказує, що для обмеження PRIMARY KEY або UNIQUE створюється кластерізованний або некластерізованний індекс. За замовчуванням обмеження PRIMARY KEY мають значення CLUSTERED. За замовчуванням обмеження UNIQUE мають значення NONCLUSTERED.

Якщо кластерізованний обмеження або індекс вже створені в таблиці, значення CLUSTERED не може бути задано. Якщо кластерізованний обмеження або індекс вже існує в таблиці, обмеження PRIMARY KEY за замовчуванням мають значення NONCLUSTERED.

Стовпці, які мають тип даних ntext. text. varchar (max). nvarchar (max). varbinary (max). xml або image. не можуть зазначатися як індексних стовпців.

Стовпець або список стовпців в дужках, що використовуються в новому обмеження.

Вказує порядок сортування стовпця або стовпців, що беруть участь в обмеженнях таблиці. Значення за замовчуванням - ASC.

Вказує, наскільки повно компонент Компонент Database Engine повинен заповнювати кожну сторінку індексу, використовувану для зберігання індексних даних. Користувачем можуть бути задані значення аргументу fillfactor в діапазоні від 1 до 100. Якщо значення не задано, за умовчанням приймається значення 0.

Опис вираження WITH FILLFACTOR = fillfactor як єдиного параметра індексу, що застосовується до обмежень PRIMARY KEY або UNIQUE, збережено для забезпечення зворотної сумісності, але в майбутніх випусках цей вислів документовано не буде. Інші параметри індексу можна вказати в реченні index_option інструкції ALTER TABLE.

Вказує місце зберігання індексу, створеного для обмеження. Якщо визначено аргумент partition_scheme_name. індекс розділяється на секції, які зіставляються з файловими групами, визначеними аргументом partition_scheme_name. Якщо визначено аргумент filegroup. індекс створюється в іменованої файлової групі. Якщо вказано аргумент "default" або пропозиція ON не визначене взагалі, індекс створюється в тій же файлової групі, що і таблиця. Якщо при додаванні кластерізованного індексу для обмежень PRIMARY KEY або UNIQUE вказано пропозиція ON, то вся таблиця переміщується в зазначену файлову групу в момент створення цього індексу.

В даному контексті слово «default» не є ключовим словом; це ідентифікатор файлової групи за замовчуванням, який повинен бути обмежений спеціальними символами, як у виразах ON "default" або ON [default]. Якщо вказано значення "default". то параметру QUOTED_IDENTIFIER для поточного сеансу має бути присвоєно значення ON. Це значення використовується за умовчанням.

FOREIGN KEY REFERENCES

Обмеження, що забезпечує довідкову цілісність даних в стовпці. Обмеження FOREIGN KEY вимагають, щоб будь-яке значення в стовпці обов'язково існувало в зазначеному стовпці посилальної таблиці.

Таблиця, на яку посилається обмеження FOREIGN KEY.

Стовпець або список стовпців в дужках, на які посилається нове обмеження FOREIGN KEY.

Компонент Компонент SQL Server Database Engine формує помилку, і виконується відкат операції видалення рядка з батьківської таблиці.

Якщо з батьківської таблиці видаляється рядок, відповідні їй рядки видаляються і з посилається таблиці.

Всі значення, що становлять зовнішній ключ, при видаленні відповідного рядка батьківської таблиці встановлюються в значення NULL. Для виконання цього обмеження зовнішні ключові стовпці повинні допускати значення NULL.

Всі значення, що містять зовнішній ключ, при видаленні відповідного рядка батьківської таблиці встановлюються в значення за замовчуванням. Для виконання цього обмеження все зовнішні ключові стовпці повинні мати визначення за замовчуванням. Якщо стовпець допускає значення NULL і значення за замовчуванням явно не визначено, значенням стовпця за замовчуванням стає NULL.

Не слід використовувати параметр CASCADE, якщо таблиця буде включена в публікацію злиттям, в якій використовуються логічні записи. Додаткові відомості про логічних записах см. В розділі Зміни групування пов'язаних рядків з логічними записами.

Дія ON DELETE CASCADE не може бути визначено, якщо в змінною таблиці вже існує тригер INSTEAD OF ON DELETE.

Якщо над рядком в таблиці Vendor виконується інструкція DELETE, а для ProductVendor.VendorID зазначено дію ON DELETE CASCADE, то компонент Компонент Database Engine перевіряє наявність однієї або декількох залежних рядків в таблиці ProductVendor. Якщо вони існують, то, крім рядка в таблиці Vendor. будуть видалені також і всі залежні рядки в таблиці ProductVendor.

В іншому випадку, якщо задано значення NO ACTION, компонент Компонент Database Engine викликає помилку і відкочується дію з видалення рядка в таблиці, якщо хоча б один рядок в таблиці ProductVendor посилається на неї.

Компонент Компонент Database Engine повертає помилку, а оновлення рядка батьківської таблиці відкочується.

Відповідні рядки оновлюються в посилається таблиці, якщо цей рядок оновлюється в батьківській таблиці.

Всім значенням, що становить зовнішній ключ, присвоюється значення NULL, коли оновлюється відповідний рядок в батьківській таблиці. Для виконання цього обмеження зовнішні ключові стовпці повинні допускати значення NULL.

Всім значенням, що становить зовнішній ключ, присвоюється їх значення за замовчуванням, коли оновлюється відповідний рядок в батьківській таблиці. Для виконання цього обмеження все зовнішні ключові стовпці повинні мати визначення за замовчуванням. Якщо стовпець допускає значення NULL і значення за замовчуванням явно не визначено, значенням стовпця за замовчуванням стає NULL.

Не слід використовувати параметр CASCADE, якщо таблиця буде включена в публікацію злиттям, в якій використовуються логічні записи. Додаткові відомості про логічних записах см. В розділі Зміни групування пов'язаних рядків з логічними записами.

Дії ON UPDATE CASCADE, SET NULL і SET DEFAULT не можуть бути визначені, якщо в змінною таблиці вже існує тригер INSTEAD OF для умови ON UPDATE.

Якщо при виконанні інструкції UPDATE для рядка в таблиці Vendor вказано ON UPDATE CASCADE для стовпця ProductVendor.VendorID. компонент Компонент Database Engine виробляє зміна залежних рядків в таблиці ProductVendor. Якщо вони існують, то крім рядка в таблиці Vendor буде змінена також і залежна рядок в таблиці ProductVendor.

Якщо ж вказано NO ACTION, компонент Компонент Database Engine ініціює помилку і відкочується операцію поновлення рядка таблиці Vendor. якщо на неї посилається хоча б один рядок з таблиці ProductVendor.

NOT FOR REPLICATION

Може бути визначено для обмежень FOREIGN KEY і CHECK. Якщо обмеження супроводжується цією пропозицією, воно не виконується, коли агенти реплікації виконують операції вставки, оновлення або видалення.

Задає значення за замовчуванням для стовпця. Визначення DEFAULT можуть використовуватися для вказівки значень за замовчуванням для нових стовпців в існуючих рядках даних. Визначення DEFAULT можна додавати до стовпців, які містять дані типу timestamp. мають властивість IDENTITY, існуючим визначенням DEFAULT, або в тому випадку, якщо для них встановлено значення за замовчуванням. Якщо для стовпця задано значення за замовчуванням, необхідно видалити його перед завданням нового умовчання. Якщо для стовпця визначається користувачем типу вказано значення за замовчуванням, цей тип повинен підтримувати неявне перетворення виразу constant_expression в визначений користувачем тип. Для збереження сумісності з більш ранніми версіями сервера SQL Server значенням DEFAULT може бути присвоєно ім'я обмеження.

Литеральное значення, NULL або системна функція, яка використовується в якості значення стовпця за замовчуванням. Якщо аргумент constant_expression використовується спільно зі стовпцем визначається користувачем типу Microsoft.NET Framework, реалізація типу повинна підтримувати явне перетворення виразу constant_expression до визначеного користувачем типу.

Визначає стовпець, пов'язаний з визначенням DEFAULT рівня таблиці.

Вказує, що значення, вказане в якості DEFAULT для аргументу constant_expression. зберігається в новому стовпці, що додається до існуючих рядках. Оператор WITH VALUES може бути зазначений тільки в тому випадку, якщо зазначений параметр DEFAULT в реченні ADD стовпчика. Якщо доданий стовпець допускає значення NULL і вказано оператор WITH VALUES, новий стовпець, доданий до існуючих рядках, заповнюється значенням за замовчуванням. Якщо оператор WITH VALUES не вказано для стовпців, що допускають значення NULL, новий стовпець для існуючих рядків заповнюється значенням NULL. Якщо новий стовпець не допускає значення NULL, значення за замовчуванням зберігається у всіх рядках незалежно від того, зазначений оператор WITH VALUES чи ні.

Обмеження, що забезпечує цілісність домену шляхом обмеження можливих значень, які можуть бути введені в стовпець або стовпці.

Логічний вираз, що використовується в обмеженні CHECK і повертає значення TRUE або FALSE. Аргумент logical_expression. використовуваний в обмеженнях CHECK, не може містити посилань на інші таблиці, але може посилатися на інші стовпці тій же таблиці в тому ж рядку. Вираз не може посилатися на псевдонім типу даних.

При додаванні нових обмежень FOREIGN KEY або CHECK всі існуючі дані перевіряються на відповідність обмеженням, якщо не вказано параметр WITH NOCHECK. У тому випадку, якщо виявляються порушення, виконання ALTER TABLE завершується з помилкою. При додаванні до існуючого колонки обмежень PRIMARY KEY або UNIQUE всі дані в стовпці повинні бути унікальні. Якщо будуть виявлені повторювані значення, ALTER TABLE завершиться невдало. При додаванні обмеження PRIMARY KEY або UNIQUE наявність параметра WITH NOCHECK не має значення.

Кожне обмеження PRIMARY KEY і UNIQUE створює індекс. Число обмежень UNIQUE і PRIMARY KEY не може спричинитися до перевищення граничної кількості індексів в таблиці (999 некластерізованних і 1 кластерізованний). Обмеження зовнішнього ключа не викликають автоматичного створення індексу. Однак стовпці зовнішніх ключів часто використовуються в умовах з'єднання запитів за допомогою зіставлення стовпця або стовпців з обмеження зовнішнього ключа однієї таблиці зі стовпцем або стовпцями первинного або унікального ключів в іншій таблиці. Індекс за стовпцями таблиці зовнішнього ключа дозволяє компоненту Компонент Database Engine швидко знаходити пов'язані дані в таблиці зовнішніх ключів.