|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Добрый день, джентельмены! Наставьте на путь истинный... Есть в таблице два поля типа date DateBegin и DateEnd, которые означают дату начала работы (например) и дату окончания работы. Поле DateBegin не может принимать значение NULL, что отражено в конструкторе таблиц и не может быть ранее, допустим 01.01.2017. Поле DateEnd может принимать значение как NULL, так и некоторое значение даты, которая должна быть более (или равна) дате начала работы, но не более конечной даты. Настиг вопрос, как написать правильные ограничения на столбцы дат. 1) Вставляю в поле ограничения для DateBegin следующее ([fValDateBegin]>='2017-01-01' AND [fValDateBegin]<'2050-01-01') 2) Вставляю в поле ограничения для DateEnd следующее ([fValDateEnd]=NULL OR [fValDateEnd]>='2017-01-01' AND [fValDateEnd]<'2050-01-01') Получаю ошибку при сохранении... И попутный вопрос, как при вставке контролировать, чтобы дата начала работ была меньше или равна дате окончания работ (на уровне записи, с учетом NULL в поле DateEnd)? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 17:44 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_shПолучаю ошибку при сохранении...Чтобы исправить неизвестную ошибку, нужны неизвестные действия.edward_sh[fValDateEnd]=NULLДля проверки значения на null надо использовать оператор is null / is not nulledward_shИ попутный вопрос, как при вставке контролировать, чтобы дата начала работ была меньше или равна дате окончания работ (на уровне записи, с учетом NULL в поле DateEnd)?Создать соответствующий check constraint. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 18:24 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh что отражено в конструкторе таблиц Пользоваться скриптами SQL и выполнять оные. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 18:31 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
имхо, построитель глючит попробуйте sql (логику не проверял) типа: ALTER TABLE [dbo].[Tab] add CONSTRAINT CHK_Column CHECK ([fValDateBegin]>='2017-01-01' AND [fValDateBegin]<'2050-01-01'), CONSTRAINT CHK_Column2 CHECK ([fValDateEnd]=NULL OR ([fValDateEnd]>='2017-01-01' AND [fValDateEnd]<'2050-01-01')) Go ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 20:56 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
godsql имхо, построитель глючит да щас ) скорее у автора есть данные, не подпадающие под прописанные ограничения ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 21:40 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
godsql имхо, построитель глючит попробуйте sql (логику не проверял) типа: ALTER TABLE [dbo].[Tab] add CONSTRAINT CHK_Column CHECK ([fValDateBegin]>='2017-01-01' AND [fValDateBegin]<'2050-01-01'), CONSTRAINT CHK_Column2 CHECK ([fValDateEnd]=NULL OR ([fValDateEnd]>='2017-01-01' AND [fValDateEnd]<'2050-01-01')) Go ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 23:41 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
пробовал и такую конструкцию как fValDateEnd is null Результат был тот же самый. При попытке сохранить результаты правки, выходит сообщение, что текст ограничения содержит ошибки. В Accesse есть возможность на каждое нарушение ограничения вывести свое соощение (в чем конкретно ошибка). В SQL так понимаю такого нет? Очень неинформативное сообщение о нарушении данных в ограничении ХХХХ базы такой-то. Данные в столбцах таковы fValDateBegin = 2017-01-01, fValDateEnd = NULL во всех записях. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 07:05 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh пробовал и такую конструкцию как fValDateEnd is null Результат был тот же самый. При попытке сохранить результаты правки, выходит сообщение, что текст ограничения содержит ошибки. В Accesse есть возможность на каждое нарушение ограничения вывести свое соощение (в чем конкретно ошибка). В SQL так понимаю такого нет? Очень неинформативное сообщение о нарушении данных в ограничении ХХХХ базы такой-то. А то в вашем посте вы уже рассказали про 2 версии сообщения об ошибке: 1) ошибка в тексте ограничения 2) ошибка в данных таблицы Неужели трудно просто скопировать? edward_sh Данные в столбцах таковы fValDateBegin = 2017-01-01, fValDateEnd = NULL во всех записях. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 09:04 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh пробовал и такую конструкцию как fValDateEnd is null А то у вас множество ошибок накладываются друг на друга, и отлаживать очень трудно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 09:05 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Конструктор таблиц упорно не хотел сохранять ограничения, вопя об ошибке сохранения. Убил эти ограничения и через ALTER все прекрасно сохранилось. Попутно возник вопрос - у меня несколько таблиц, в которых содержатся аналогичные поля, на которые накладываются аналогичные ограничения. Есть ли возможность создать ОДНО ограничение для каждого столбца и применить его к разным таблицам? Или лучше вынести проверку корректности данных в функцию и применять ее через триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 09:31 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
iap godsql имхо, построитель глючит попробуйте sql (логику не проверял) типа: ALTER TABLE [dbo].[Tab] add CONSTRAINT CHK_Column CHECK ([fValDateBegin]>='2017-01-01' AND [fValDateBegin]<'2050-01-01'), CONSTRAINT CHK_Column2 CHECK ([fValDateEnd]=NULL OR ([fValDateEnd]>='2017-01-01' AND [fValDateEnd]<'2050-01-01')) Go согласен :) Скобки поправил в логике, а здесь не исправил :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 12:09 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
godsql iap пропущено... Что по-вашему вернёт [fValDateEnd]=NULL ?? согласен :) Скобки поправил в логике, а здесь не исправил :) https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/null-and-unknown-transact-sql?view=sql-server-2017 В констрейнте CHECK надо, чтобы выражение не вернуло FALSE. В отличие от выражений в WHERE или ON, которые пропускают только записи, для которых получается TRUE. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 12:23 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Убил эти ограничения и через ALTER все прекрасно сохранилось. Ну ды щаз, конечно! Ты просто создал недоверенный констрейнт. Теперь проверь его! Код: sql 1.
:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2020, 21:46 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Alter table myTable With Check Check constraint myConstraint Command(s) completed successfully. Изменение в поле fValDateBegin (заранее неверное при ограничении) выдает ошибку вставки записи из-за сработавшего ограничения на поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2020, 07:33 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Самое интересное, что если у поля поменять тип с date на datetime, ошибок SSMS при сохранении этого же ограничения не происходит. Интересно, в чем фикус? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:32 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, условие проверки выполняется, какой тут фокус может быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:10 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Добрый день,Владислав Колосов! Не понятно, почему при работе в SSMS с полем типа datetime не вылетает ошибка, а при типе поля date появляется? И попутный вопрос - не могу для себя выяснить правильное направление движения. Использовать ли ограничения на значение столбцах или же использовать триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 15:10 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, вылетает ошибка потому, что переданные значения не проходят проверку. Проверяйте формулу применительно к значению простым запросом. Уберите дефисы из строки даты, в таком написании дата трактуется неоднозначно, зависит от установленного языка сессии. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 15:44 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Владислав Колосов, по Вашему совету убрал дефисы (хотя читал, что это тоже универсальный формат даты, не зависящий от языка) ([fValDateEnd] IS NULL OR [fValDateEnd]>='20170101' AND [fValDateEnd]<'20500101') Все равно при сохранении вылетает ошибка "Error validating constraint. Do you want to edit..." При смене на тип datetime этой ошибки нет, как впрочем и при вставке через командную строку... А по второй части вопроса можете что-нибудь посоветовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 16:50 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Использовать ли ограничения на значение столбцах или же использовать триггер? edward_sh Все равно при сохранении вылетает ошибка "Error validating constraint. Do you want to edit..." Повторю ещё раз: alexeyvg edward_shДанные в столбцах таковы fValDateBegin = 2017-01-01, fValDateEnd = NULL во всех записях. И пишите и выкладывайте скрипты, результаты выполнения, а то получается, как секретарша: "я что то нажала а он не работает что мне делать". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:11 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, Выполните запрос Код: sql 1.
, увидите, что мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:39 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Выкладываю скрины.... Походу сервер не дает приложить файлы... И еще попутный вопрос .... У меня в нескольких таблицах в полях есть одинаковые ограничения на дату. Что лучше, прописывать ограничения для каждой таблицы или создать функцию, где эти ограничения прописаны и применить эту функцию к необходимым столбцам всех нужных таблиц? На всякий случай вывод @@Version Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64) Mar 19 2015 12:32:14 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) Модератор: Вложение удалено. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 18:41 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, Ваши картинки никому не нужны. Текст команд и текст ошибок достаточно скопировать через буфер обмена. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 22:13 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Что лучше, прописывать ограничения для каждой таблицы или создать функцию, где эти ограничения прописаны и применить эту функцию к необходимым столбцам всех нужных таблиц? Владислав Колосов edward_sh, Выполните запрос Код: sql 1.
, увидите, что мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 23:23 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Походу сервер не дает приложить файлы... В теге SRC ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 23:25 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
2alexeyvg alexeyvg edward_sh Использовать ли ограничения на значение столбцах или же использовать триггер? Почему предпочтительнее ограничение (в рассматриваемом случае check) перед триггером? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 13:58 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
PaulWist 2alexeyvg alexeyvg пропущено... Конечно, ограничения. Почему предпочтительнее ограничение (в рассматриваемом случае check) перед триггером? Я представляю, какой будет триггер, если человек 21 день создаёт чек-констрейн. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 17:04 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
alexeyvg Оно быстрее, ... За счёт чего быстрее? Можно привести репо? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 18:05 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
PaulWist За счёт чего быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 18:17 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
2 alexeyvg Вопрос снимаю :) 2 invm invm Планы сравните и увидите. Как всегда коротко и доходчиво. Спасибо. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 18:50 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Очередной вопрос по заданию ограничения на столбец. Есть столбец, в котором описываются типы услуг... Например, Реализация основных профессиональных образовательных программ профессионального обучения - программ профессиональной подготовки по профессиям Реализация дополнительных профессиональных программ (МНС, СНС) на базе среднего или высшего профессионального образования Пишу ограничение на столбец типа такого: (NOT [fEduServiceMainDescr] like '%[!0-9а-я., ()-]%') Получаю ошибку, что ранее введенные данные не соответствуют ограничению. Мне нужно допустить ввод ТОЛЬКО русских букв и некоторых знаков пунктуации(точка, запятая, пробел и тире)... Подскажите, что я делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2020, 18:05 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, в указанной колонке уже есть данные, не проходящие проверку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2020, 19:11 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
То, что в колонке есть данные, не проходящие проверку ограничения - я понимаю. Я не могу понять, на какой символ ограничение "делает стойку" и правильно ли я написал правило ограничения вводимых символов? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 04:55 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
На зарубежных форумах нашел решение, попробовал - вроде работает. (NOT [fEduServiceMainDescr] like '%[^0-9а-я., ()-]%') ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 06:41 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh То, что в колонке есть данные, не проходящие проверку ограничения - я понимаю. Я не могу понять, на какой символ ограничение "делает стойку" и правильно ли я написал правило ограничения вводимых символов? Ну дык, страдалец, начертай Код: sql 1.
И воотчую узришЪ. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 08:20 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
To Alex222: Учу читать ДОРОГО! Прежде чем писать что-то, извольте сударь, прочитать сообщение... У меня одна строка в таблице, и без Вашего запроса я знаю, что косяк в ней. Вопрос был про СИМВОЛ в строке. Тем более, что решение я нашел сам, возможно, это пригодится кому-то. Выбросьте свой старославянский букварь - по нему уже никто не говорит и не пишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2020, 16:00 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Возник очередной вопрос - как в строке ограничения задать допустимые символы ' и " ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2020, 17:48 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
В самый раз начать срач про "нужны ли констрейнты ?" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2020, 09:15 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, для выражения like '%[!0-9а-я., ()-]%' достаточно наличия любого символа из списка, например, выражение '#9#' будет валидировано, хотя оно не должно пройти проверку. Для избежания этого надо выбрать обратную проверку, отобрать неподходящие символы и убедиться, что полученное множество пустое. Сделать это можно несколькими способами, например, перечислив все "плохие" символы в выражении like или выполнив отрицание "хороших". Пример, который Вы нашли выполняет второй способ. Применяйте логическую дедукцию, изучайте справку по операторам и всё получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2020, 12:21 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
Хотите совет? Сделайте выборку по максимальным и минимальным значениям дат DateBegin и DateEnd. Уверен, что вопрос отпадет сам по себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2020, 06:26 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Возник очередной вопрос - как в строке ограничения задать допустимые символы ' и " ? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2020, 09:52 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
To SQL2008: В таблице две записи у которых дата начала стоит 2017-01-01, дата окончания NULL. Что Вы хотели узнать (подсказать)? To Alexeyvg: Уважаемые коллеги, прежде чем отвечать, прочитайте ВНИМАТЕЛЬНО вопрос. Вопрос состоял не как в предикате WHERE задать символы кавычек.... To Владислав Колосов: В литературе по написанию баз данных SQL (по крайней мере, что мне попадались) описываются простые типы ограничений, типа возраст более 18 лет, дата не меньше текущей и т.д. Про задания диапазона допустимых вводимых символах - нигде, только в конференциях (и, к сожалению, в большинстве своем - зарубежных). Кстати, нигде не встречалось описание сравнения, когда дата начала есть, а дата окончания NULL (открытая). Если в лоб сравнивать, то при начале NULL и какой-то финальной даты - получим NULL, если обе даты NULL, опять получим NULL... Модератор: Поменьше эпатажа с этим вашим "внимательно читайте вопрос". Отвечающие у вас тут не на экзамене. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2020, 16:14 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh, учебники, безусловно, важны, но первичным документом является прилагаемая к серверу документация. Я для удобства установил справку SQL локально. Например, Вы выбрали для исполнения оператор LIKE или нашли какой-то пример с его описанием. Соответственно, понятия не имеете о его области применения, ограничениях использования, и, наконец, аргументах. Можете скопировать пример и пытаться методом "тыка", используя свои знания других языков программирования, подобирать нужные параметры. А можно обратиться к справке. В данном случае в справке указаны четыре символа-шаблона, один из которых подошел бы для проверки "плохих" символов. Также точно можно прочесть об обработке NULL в теме null values [SQL server]. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2020, 19:19 |
|
Создание ограниченя на столбец
|
|||
---|---|---|---|
#18+
edward_sh Уважаемые коллеги, прежде чем отвечать, прочитайте ВНИМАТЕЛЬНО вопрос. Вопрос состоял не как в предикате WHERE задать символы кавычек.... edward_sh как в строке ограничения задать допустимые символы ' и " ? Если из за ерунды получается топик на несколько страниц, длительностью недели, то, подумайте, может, дело в формулировках, в описании задачи? Перечитайте ваши посты, вы бы приняли их за постановку задачи, если бы были фрилансером, и от вашего понимания зависела бы оплата? Понятней формулируйте задачи, не стесняйтесь выкладывать репро: временные таблицы с заполнением их данными, ваш запрос, ваш результат, и покажите желаемый результат. Тогда вы потратите несравнимо меньше времени, а ваши посты не будут встречаться неизменным смехом. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2020, 19:46 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1685949]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 176ms |
0 / 0 |