|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.12.2011, 19:58 | #1 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
правила transact sql
Здравствуйте! Помогите исправить ошибку, пожалуйста!
create database test; go use test create rule MyRule as @range = 12 and @value = '[0-9]'; go create type My_type from varchar(max) not null; go затем создаю и заполняю таблицы... выходит ошибка: Сообщение 111, уровень 15, состояние 1, строка 6 CREATE RULE должна быть первой инструкцией в пакетном запросе. Сообщение 1801, уровень 16, состояние 3, строка 2 База данных "test" уже существует. Выберите другое имя базы данных. Сообщение 2715, уровень 16, состояние 7, строка 81 Столбец, параметр или переменная #3: невозможно найти тип данных MyRule. |
01.12.2011, 22:09 | #2 | |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Цитата:
|
|
02.12.2011, 07:21 | #3 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
Всёравно ошибка((
--Cоздание таблицы Organization_insp (Организация-приёмщик) create table Org_insp ( Org_insp_ID int identity primary key, Org_insp_NAME varchar(max), Org_insp_INN varchar(max) check (Org_insp_INN = 12 and Org_insp_INN like '[0-9]'), City_ID int references dbo.City ( City_ID)); insert into Org_insp values ('ООО «Большая медведица»', '231234567898', '1'); Сообщение 547, уровень 16, состояние 0, строка 86 Конфликт инструкции INSERT с ограничением CHECK "CK__Org_insp__Org_in__173876EA ". Конфликт произошел в базе данных "test", таблица "dbo.Org_insp", column 'Org_insp_INN'. Выполнение данной инструкции было прервано. |
02.12.2011, 08:13 | #4 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
Немного переделала
--Cоздание таблицы Organization_insp (Организация-приёмщик) create table Org_insp ( Org_insp_ID int identity primary key, Org_insp_NAME varchar(max) not null, Org_insp_INN varchar(12) not null default 0, check ((Org_insp_INN = 12) and (Org_insp_INN like '[0-9]')), City_ID int references dbo.City ( City_ID)); insert into Org_insp values ('ООО «Большая медведица»', '231234567898', '1'); теперь другая ошибка: Сообщение 248, уровень 16, состояние 1, строка 87 Преобразование значения "231234567898" типа varchar привело к переполнению столбца типа int. Выполнение данной инструкции было прервано. |
02.12.2011, 09:06 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
проблема явно тут
Цитата:
Вы явно хотели проверить длину. Но проверяете НЕ ДЛИНУ. |
|
02.12.2011, 11:39 | #6 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
Serge_Bliznykov, а как тогда проверить длинну не могли бы подсказать?
|
02.12.2011, 11:51 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Создавайте как
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
02.12.2011, 12:02 | #8 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
Аватар, всё равно ошибка(
Говорит, что конфлик инструкции INSERT с ограничением CHECK "CK_Org_insp_Org_in_173876EA". Конфликт произошёл в базе данных "test" , таблица "dbo.Org_insp", column 'Org_insp_INN' |
02.12.2011, 16:17 | #9 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Ошибка будет, т.к. надо понимать что делает здесь LIKE.
В приведенном примере проверка на ввод цифр во всех 12-позициях должна быть такой: Код:
Никак не получается понять ТС. Почему он упорно пытается нагрузить сервер СУБД этой ерундой. Такие проверки делаются на клиенте. Вот, например. Неверно ввели ИНН и далее прога отправляет его на сервер. Сервер проверяет (по условиям CHECK) и возмущенно ругается. Наверняка разработчик в этом случае будет посылать исключение на клиента. А клиент, в свою очередь, будет пытаться понять что произошло и все равно займется проверкой введенного значения. Так зачем же такие ректальные операции над гландами, когда можно спокойно, до отправки данных на сервер, проверить все ли гладко с данными и только затем отправлять их в БД? |
02.12.2011, 16:53 | #10 |
Форумчанин
Регистрация: 15.10.2010
Сообщений: 105
|
Он всё равно мне ошибку выдаёт( я уже так написала:
--Cоздание таблицы Organization_insp (Организация-приёмщик) create table Org_insp ( Org_insp_ID int identity primary key, Org_insp_NAME varchar(max) not null, Org_insp_INN bigint check (Org_insp_INN like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'), City_ID int references dbo.City ( City_ID)); insert into Org_insp values ('ООО «Большая медведица»', '23', '1'),('ОАО «Практик»', '2312', '1'), ('ООО «Ученье-свет!»', '2312', '1'); Сообщение 547, уровень 16, состояние 0, строка 86 Конфликт инструкции INSERT с ограничением CHECK "CK__Org_insp__Org_in__182C9B23 ". Конфликт произошел в базе данных "test", таблица "dbo.Org_insp", column 'Org_insp_INN'. Выполнение данной инструкции было прервано. (строк обработано: 5) (строк обработано: 8) (строк обработано: 3) Сообщение 547, уровень 16, состояние 0, строка 132 Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK__Business___Org_i__2D27B809 ". Конфликт произошел в базе данных "test", таблица "dbo.Org_insp", column 'Org_insp_ID'. Выполнение данной инструкции было прервано. что с этим сделать??? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на Transact-SQL | REztor | SQL, базы данных | 3 | 15.04.2011 15:12 |
transact-sql | Neymexa | Помощь студентам | 0 | 05.04.2010 10:12 |
transact-sql | Neymexa | Обсуждение статей | 2 | 25.03.2010 14:53 |
Помогите, пожалуйста, с написанием задачи в Transact SQL | Student'ochka | SQL, базы данных | 2 | 24.05.2009 17:21 |
Необходимо написать задачу в Transact SQL | Student'ochka | Помощь студентам | 1 | 24.05.2009 14:05 |