Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
Здравствуйте, столкнулся с непростой для начинающего задачей
В общем, есть поле "Тип_товара", имеющий два значения (категория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)

-);
19 май 19, 11:36    [21888103]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
eleau,

Ошибся,
последняя строчка
UNIQUE (Type_tovara, Nazvanie_tovara)
19 май 19, 11:37    [21888105]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
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
)
19 май 19, 12:04    [21888114]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
invm,
Спасибо
19 май 19, 12:08    [21888118]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
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, ошибку не выдает

Что я не так заполняю?(
19 май 19, 17:29    [21888277]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
eleau
Что я не так заполняю?(
Значения столбцов указаны не в том порядке.

ЗЫ: исправьте в шаьлоне А-я на А-Я
19 май 19, 17:45    [21888288]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
aleks222
Member

Откуда:
Сообщений: 952
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
;
19 май 19, 17:47    [21888291]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
aleks222,

обрабатывается только tovar1 (category1)
19 май 19, 18:03    [21888304]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
eleau,

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)
19 май 19, 18:12    [21888309]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
invm,
Сообщение 8141, уровень 16, состояние 0, строка 2
Ограничение столбца CHECK для столбца "Type_tovara" ссылается на другой столбец, таблица "Tovars".
19 май 19, 18:19    [21888312]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
eleau,

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)
);
19 май 19, 18:51    [21888320]     Ответить | Цитировать Сообщить модератору
 Re: Формат полей/столбцов  [new]
eleau
Member

Откуда:
Сообщений: 11
invm,
Большое спасибо, теперь всё заносится в таблицу как надо
19 май 19, 18:56    [21888322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить