|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
Здравствуйте! Имеется таблица parts, нужно на SQL выгрузить из базы данных три поля, значения одного из которых находятся в пределах от 0 до 30 и поставить после вывода запрет на ограничение одного из других полей: ему можно задавать значения c помощью команды UPDATE только от 5 до 35, иначе выводить ошибку ERROR. Написал вот так: Код: sql 1. 2.
Если задаю текст ошибки, то он просто выводит текст этой ошибки после изменения команды, и ограничения не выставляются. Если убираю ERROR, то выводит "Field COST validation type is violated". Синтаксис вроде соблюден, почему не выполняется команда ALTER TABLE и можно ли еще каким-то образом поставить ограничение? Вообще абсолютный новичок и чайник в этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2014, 19:11 |
|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
1. Поле Cost - точно числовое? 2. Ограничение не может быть установлено, если условие не выполняется для существующих записей. В данном случае - если есть записи с Cost<=5 или Cost>=35. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2014, 10:42 |
|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
SoftwareBoy, Да, оно числовое, но вот про второе условие не знал, таблица уже заполнена самыми разными числами, поэтому и не работает... Есть еще какие-то варианты, команды, как это можно реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2014, 13:15 |
|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
vezunchik95, что реализовать? 1. Больше не давать пользователю вводить неправильные значения Cost? Написать соответствующее условие в форме ввода. 2. Не дать самому себе записать неправильные значения Cost командой UPDATE из другой таблицы? Написать соответствующее условие в команде UPDATE. 3. Запретить любому приложению запись в таблицу неправильных значений Cost? Поделить таблицу на две по заданному условию и установить ограничение только в той половине, где находятся правильные значения; в дальнейшем обновлять только эту половину. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2014, 11:17 |
|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
SoftwareBoy, Да, скорее 1. После того, как я выгрузил командой SELECT нужные записи, нужно задать ограничения уже в этой новой части таблицы, чтобы никто не мог отредактировать поле Cost иначе, кроме как от 5 до 35. Если он попытается это сделать, ему должно выйти сообщение ERROR. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2014, 16:08 |
|
Ограничение на изменение поля (SQL)
|
|||
---|---|---|---|
#18+
Если я вас правильно понимаю, в существующем массиве данных ничего изменять не надо, но для любых новых изменений данных надо включить ограничение. Если это так, то вы неверно налагаете новое ограничение на таблицу в команде ALTER TABLE. Вам надо использовать нечто вроде ALTER TABLE ADD CONSTRAINT ... WITH NOCHECK. Опция NOCHECK в конце команды ALTER TABLE означает, что новое добавленное ограничение не будет применяться к уже существующим данным, а только к вновь введенным и/или к изменениям существующих. Хотя делать так очень не рекомендуется, оставляя этот вариант для крайних случаев. Оптимизатор запросов не рассматривает никакие ограничения, добавленные в определение таблицы, если они добавлялись с опцией NOCHECK. Такие ограничения будут учитываться только с момента, когда они будут повторно включены с использованием инструкции ALTER TABLE <...> CHECK CONSTRAINT ALL. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2014, 11:02 |
|
|
start [/forum/topic.php?fid=41&fpage=28&tid=1582480]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 142ms |
0 / 0 |