Как CheckConstraint примерно так же, как это делается на сервере базы данных - PullRequest
1 голос
/ 23 марта 2012

Я работаю над динамическим генерированием данных, которые анализируют проверки ограничений базы данных с использованием C ++, C # или даже Java. В настоящее время я работаю над дизайном приложения и буду признателен за советы о том, как это можно сделать в коде.

То, что я хотел бы, - это запросить базу данных для получения информации о таблице, когда я получу эту информацию для каждого CheckConstraint, что я хотел бы сделать, в коде, проанализировать это ограничение и как-то сгенерировать данные, соответствует ограничению. Это я хочу сделать для любой базы данных, указанной пользователем. Учитывая, что я пытаюсь придерживаться стандартов ANSI SQL, я считаю, что этот метод должен работать для любой базы данных, которая соответствует.

И это действительно для любой базы данных, поскольку генерация данных не ограничивается SQL Server.

1 Ответ

0 голосов
/ 25 марта 2012

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

Например:

CREATE TABLE Customers 
   (CustId IDENTITY (100, 10), 
   CFrstNm VARCHAR(10), 
   CLstNm VARCHAR(15),
   CustomerLimit DOUBLE,

   CHECK (CustomerLimit <= (SELECT SUM (CreditLimit) FROM CreditLimit)))

Таким образом, лимит клиента не может превышать кредитный лимит.

По состоянию на конец дня я не уверен, куда пойдет этот плакат, поскольку КАЖДЫЙ поставщик баз данных не только имеет разные функции, функции, но функции реляционной целостности различны, как и синтаксис реляционной целостности для настройки. такие отношения и опции, как удаление, ограничивают

Как уже отмечалось, в дополнение к функциям RI в Access (и некоторым с помощью команд sql DDL) у нас есть проверочный синтаксис ограничения (снова с помощью команд sql DDL), у нас также есть код хранимой процедуры.

И СНОВА такой синтаксис отличается от функциональности и ТАКЖЕ синтаксис.

Таким образом, для Access 2010 и нового механизма обработки данных ACE у нас есть выбор триггеров таблиц и процедур хранения. Таким образом, вы можете написать процедурный код для проверки условий, и если вы вызовете ошибку в триггере таблицы перед изменением, обновление не произойдет. Таким образом, хранение процедур в событии до изменения - это еще один способ добиться условного тестирования для предотвращения обновления записей. Однако, опять-таки, такой код процедур хранилища зависит от поставщика, как и для pl / sql, T-SQL или.

Таким образом, реальная проблема здесь заключается в том, что синтаксис и язык кода процедур хранения различны в КАЖДОМ случае для КАЖДОЙ системы.

Таким образом, в Access вы можете использовать некоторые команды DDL для «проверки» ограничений, вы также можете иметь некоторые функции RI (удалить ограничение, удалить каскад, обновить каскад FK). И последнее, но не менее важное: теперь вы также можете написать код запуска таблицы для Access 2010 (и нового механизма обработки данных ACE).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...