Как сделать проверочное ограничение sql

Добавил пользователь Alex
Обновлено: 04.10.2024

но, очевидно, в некоторых других базах данных, которые мы используем, ограничение имеет другое имя. Как я могу проверить, есть ли ограничение с именем FK_ChannelPlayerSkins_Channels .

-- РЕДАКТИРОВАТЬ --

вот альтернативный метод

Стоит отметить, что в моем SQL для добавления ограничения я использовал квадратные скобки вокруг имени, например, [fk_Client_ProjectID_Project]. Вы ДОЛЖНЫ снять скобки в предложении WHERE.

Если это уникальный Constraint вам нужно немного другой вариант: IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS где constraint_name = 'UNIQUE_Order_ExternalReferenceId') НАЧАТЬ ALTER TABLE ADD CONSTRAINT Заказать UNIQUE_Order_ExternalReferenceId UNIQUE (ExternalReferenceId) END

Вышеприведенное не работает для ограничения уникального столбца (SQL2008). Мне пришлось использовать следующее: SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, ГДЕ CONSTRAINT_NAME = 'UC_constraintName'

Самый простой способ проверить наличие ограничения (а затем сделать что-то, например, удалить его, если он существует) - использовать функцию OBJECT_ID () .

Типы объектов ограничений:

  • C = CHECK ограничение
  • D = DEFAULT (ограничение или автономно)
  • F = ограничение КЛЮЧЕВОЙ КЛЮЧ
  • PK = ограничение первичного ключа
  • R = правило (в старом стиле, автономное)
  • UQ = УНИКАЛЬНОЕ ограничение

Также обратите внимание, что схема часто требуется. Схема ограничений обычно принимает схему родительской таблицы.

Неспособность поместить ваши ограничения (или что вы проверяете) в скобки при использовании этого метода также может привести к ложному отрицанию - если ваш объект использует необычные символы (такие как.), Скобки требуются.

Важно добавить имя схемы в параметре в OBJECT_ID следующим образом: IF OBJECT_ID ('dbo.CK_ConstraintName', 'C') NOT NOT NULL. Без указания схемы возвращается NULL.

Привет, спасибо за ваш ответ, это действительно полезно. Просто интересно, относится ли это к Oracle?

Не работает на sql2000. Просто используйте, OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1 чтобы быть совместимым с текущей версией вплоть до sql2000. Нет dbo схемы не требуется слишком.

Если вы ищете другой тип ограничения, например, по умолчанию, вы должны использовать другой запрос (Из Как найти ограничение по умолчанию с помощью INFORMATION_SCHEMA? Ответил devio ). Использование:

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

Если задать ограничение CHECK для одного столбца, он допускает только определенные значения для этого столбца.

При определении ограничения CHECK для таблицы он может ограничивать значения в определенных столбцах, основываясь на значениях в других столбцах в строке.

Проверка SQL на создание таблицы

Следующий SQL создает ограничение CHECK в столбце "Age" при создании таблицы "лица". Проверка ограничение гарантирует, что вы не можете иметь любое лицо моложе 18 лет:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);

Чтобы разрешить именование ограничения CHECK и определить ограничение CHECK для нескольких столбцов, используйте следующий синтаксис SQL:

MySQL/SQL Server/Oracle/MS доступа:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);

Проверка SQL на изменение таблицы

Чтобы создать ограничение CHECK в столбце "Age", когда таблица уже создана, используйте следующий код SQL:

MySQL/SQL Server/Oracle/MS доступа:

Чтобы разрешить именование ограничения CHECK и определить ограничение CHECK для нескольких столбцов, используйте следующий синтаксис SQL:

Ограничения целостности в базах данных SQL Server, CHECK, пользовательские типы данных (user-defined types, UDF), RULE, первичный ключ (PRIMARY KEY), ограничения уникальности (UNIQUE)

Главное средство обеспечение доменной целостности в SQL Server - это ограничение CHECK. Оно может быть определено при создании таблицы или добавлено позднее при помощи команды ALTER TABLE, например:

ALTER TABLE dbo.Employees

CONSTRAINT CK_birthdate

CHECK (BirthDate > '01-01-1900' AND BirthDate

На графическом экране ограничение можно создать (или получить информацию/изменить/удалить) на графическом экране Enterprise Manager, открыв таблицу в режиме Design Table, а затем нажав на кнопку Manage Constraints. Про ограничение CHECK необходимо сказать, что:

· можно проверять соответствие только константным значениям (диапазону значений). Использовать подзапросы в ограничении нельзя.

· по умолчанию существующие данные не проверяются на соответствие данному ограничению (проверяются только добавляемые в таблицу и заменяемые данные), так что вы вполне можете столкнуться с ситуациями, когда в таблице есть нарушающие ограничение правило.

Практически полный аналог Chec k в SQL Server - это Rule , правило. Фактически этот тот же самый CHECK, но создаваемый как отдельный объект базы данных. В результате созданное правило мы можем привязывать ко множеству столбцов в базе:

CREATE RULE id_chk AS @id BETWEEN 0 and 10000

sp_bindrule id_chk, 'cust_sample.cust_id'

На графическом экране Enterprise Manager работа с правилами производится из контейнера Rules под контейнером баз данных.

Еще одна возможность обеспечения доменной целостности - это применение пользовательского типа данных. Фактически для него можно указать только базовый тип данных - на основе которого он создается - и длину. Тем не менее и такая возможность может быть полезной, например, для почтовых индексов, ИНН и аналогичных данных.

Если же приходится использовать более сложные типы обеспечения доменной целостности, то выход - использование хранимых процедур или триггеров. В них можно реализовать обращение к другим таблицам, вызов внешних программных серверов и другую сложную логику.

Средства обеспечения сущностной целостности очевидны: это - первичные ключи и ограничения уникальности. Первичный ключ можно определять при создании таблицы или потом при помощи команды ALTER TABLE:

ALTER TABLE doc_exe

ADD column_b INT IDENTITY

CONSTRAINT column_b_pk PRIMARY KEY

На графическом экране - так же открываем таблицу в режиме Design table и нажимаем на кнопку Manage Indexes/Keys. Оттуда же создаем и ограничение UNIQUE - средство обеспечения уникальности значений без первичного ключа.

Ссылочная целостность, обеспечивается, как уже говорилось, системой первичных и внешних ключей. Создание их - см. создание первичного ключа. Можно определять их как при создании таблицы, так и после, средствами TSQL (ALTER TABLE) или Enterprise Manager.

Favorite

Добавить в избранное

SQL - ограничение CHECK

О граничение CHECK позволяет условию проверить значение вводимой записи. Если условие принимает значение ложь, запись нарушает ограничение и не вошли в таблицу.

Пример

Например, следующая программа создает новую таблицу под названием CUSTOMERS и добавляет пять столбцов. Здесь мы добавим CHECK с колонкой AGE, так что вы не можете добавить клиента, которому не исполнилось 18 лет.

Если таблица CUSTOMERS уже создана, то чтобы добавить СНЕСК в столбец AGE, вы должны написать заявление, как приведенный ниже:

Вы также можете использовать следующий синтаксис, который поддерживает именование ограничения в нескольких колонках:

Удаление ограничения СНЕСК

Чтобы удалить СНЕСК, используйте следующий синтаксис SQL. Этот синтаксис не работает в MySQL.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: