Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Формат полей/столбцов / 12 сообщений из 12, страница 1 из 1
19.05.2019, 11:36
    #39814966
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
Здравствуйте, столкнулся с непростой для начинающего задачей
В общем, есть поле "Тип_товара", имеющий два значения (категория1,категория2), по умолчанию стоит "категория1".
Подскажите, пожалуйста, как сделать так, чтобы если у товара категория1, то любой формат названия товара, а если у товара категория2, то формат названия товара следующий: "2 буквы.цифра.последние 2 цифры текущего года", например "аб.7.19".

Вот что есть:

Create table Tovars
(
Kod_tovara int Primary Key Identity(2,3),
Type_tovara varchar(20) default 'category1' CHECK (Type_tovara IN ('category1', 'category2')),
Nazvanie_tovara
UNIQUE (Type_instrumenta, Nazvanie_instrumenta)

-);
...
Рейтинг: 0 / 0
19.05.2019, 11:37
    #39814967
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
eleau,

Ошибся,
последняя строчка
UNIQUE (Type_tovara, Nazvanie_tovara)
...
Рейтинг: 0 / 0
19.05.2019, 12:04
    #39814970
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
Код: sql
1.
2.
3.
4.
Type_tovara varchar(20) default 'category1' CHECK (
 Type_tovara IN ('category1', 'category2') and
 Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end
)
...
Рейтинг: 0 / 0
19.05.2019, 12:08
    #39814972
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
invm,
Спасибо
...
Рейтинг: 0 / 0
19.05.2019, 17:29
    #39815057
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
invm,

Create table Tovars
(
Kod_tovara int not Null Primary Key Identity(2,3),
Type_tovara varchar(20) default 'category1' CHECK (Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end),
Nazvanie_tovara varchar(20) Not Null,
UNIQUE (Type_tovara , Nazvanie_tovara )
);

Пробую заполнить таблицу данными

insert into Tovars(Type_tovara,Nazvanie_tovara )values ('category2', 'аО.1.19' );
insert into Tovars(Type_tovara,Nazvanie_tovara )values ('category2', 'Аб.7.19' );
insert into Tovars(Type_tovara,Nazvanie_tovara )values ('category2', ОО.8.18' );
insert into Tovars(Type_tovara,Nazvanie_tovara )values ('category1', 'tovar1');
);

Пишет: Конфликт инструкции INSERT с ограничением CHECK....Конфликт произошел в базе данных "master", таблица "dbo.Tovars", column 'Type_tovara'.
Выполнение данной инструкции было прервано.

Ошибка выдается на первые три строчки, т.е. там, где category1, ошибку не выдает

Что я не так заполняю?(
...
Рейтинг: 0 / 0
19.05.2019, 17:45
    #39815066
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
eleauЧто я не так заполняю?(Значения столбцов указаны не в том порядке.

ЗЫ: исправьте в шаьлоне А-я на А-Я
...
Рейтинг: 0 / 0
19.05.2019, 17:47
    #39815069
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Create table #Tovars
(
	Kod_tovara int not Null Primary Key Identity(2,3),
	Type_tovara varchar(20) default 'category1', --CHECK (Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end),
	Nazvanie_tovara varchar(20) Not Null,
	UNIQUE (Type_tovara , Nazvanie_tovara )
);

--Пробую заполнить таблицу данными

insert into #Tovars(Type_tovara,Nazvanie_tovara )values ('category2', 'аО.1.19' );
insert into #Tovars(Type_tovara,Nazvanie_tovara )values ('category2', 'Аб.7.19' );
insert into #Tovars(Type_tovara,Nazvanie_tovara )values ('category2', 'ОО.8.18' );
insert into #Tovars(Type_tovara,Nazvanie_tovara )values ('category1', 'tovar1');


select * from #Tovars
--where Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end
where Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я].%' else '%' end
;

select * from #Tovars
--where Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end
where Type_tovara IN ('category1', 'category2') and Type_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]%' else '%' end
;
...
Рейтинг: 0 / 0
19.05.2019, 18:03
    #39815079
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
aleks222,

обрабатывается только tovar1 (category1)
...
Рейтинг: 0 / 0
19.05.2019, 18:12
    #39815083
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
eleau,

Код: sql
1.
CHECK (Type_tovara IN ('category1', 'category2') and Nazvanie_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я].[0-9].' + right(str(year(getdate())), 2) else '%' end)
...
Рейтинг: 0 / 0
19.05.2019, 18:19
    #39815085
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
invm,
Сообщение 8141, уровень 16, состояние 0, строка 2
Ограничение столбца CHECK для столбца "Type_tovara" ссылается на другой столбец, таблица "Tovars".
...
Рейтинг: 0 / 0
19.05.2019, 18:51
    #39815089
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
eleau,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Create table #Tovars
(
 Kod_tovara int not Null Primary Key Identity(2,3),
 Type_tovara varchar(20) default 'category1', 
 Nazvanie_tovara varchar(20) Not Null,
 UNIQUE (Type_tovara , Nazvanie_tovara ),
 CHECK (Type_tovara IN ('category1', 'category2') and Nazvanie_tovara like case when Type_tovara = 'category2' then '[a-zA-Zа-яА-я][a-zA-Zа-яА-я].[0-9].' + right(str(year(getdate())), 2) else '%' end)
);
...
Рейтинг: 0 / 0
19.05.2019, 18:56
    #39815091
eleau
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат полей/столбцов
invm,
Большое спасибо, теперь всё заносится в таблицу как надо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Формат полей/столбцов / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]