Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
nordgaimer Member Откуда: Сообщений: 2 |
Есть таблица t_Inv В ней есть поле StateCode StateCode может принимать значения: 1100110, 1100111, 1100112, 1100113, 1100114 Причем есть правило, запрещающее переход с одного значения на другое, кроме описанного ниже порядка: 1100110 → 1100111 → 1100112 → 1100113 → 1100114 В таблице t_Inv есть ряд записей {DocID in ()}, в котором поле StateCode имеет самые разные значения, причем нам неизвестно какие записи с какими конкретно кодами, просто знаем, что они IN (1100110,1100111,1100112,1100113). Необходимо написать запрос, который приведет все записи поля StateCode в значение 1100114, с учетом правила перехода. --- У меня совсем не выходит ( |
8 май 14, 11:04 [15989707] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
что это означает ??? |
||
8 май 14, 11:20 [15989828] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
Отмените временно правило и обновите до финального значения. Затем включите правило. |
8 май 14, 11:20 [15989834] Ответить | Цитировать Сообщить модератору |
nordgaimer Member Откуда: Сообщений: 2 |
Вот и я не могу понять. |
||||
8 май 14, 11:22 [15989851] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
а почему не поставить всем сразу "1100114"? система "не даст"? тогда вам нужно будет делать не один запрос ) "классика" - делаем справочник переходов и работаем по нему, пока есть куда переходить, как-то так: -- ваша табличка declare @x table ( id int identity primary key , StateCode int , UpdateCount int DEFAULT(0) ) insert into @x ( StateCode ) values (1100110), (1100111), (1100112), (1100113), (1100114) -- справочник переходов - тут PRIMARY KEY очень "неспроста" declare @a table ( StateFrom int PRIMARY KEY , StateInto int ) insert into @a ( StateFrom , StateInto ) values ( 1100110 , 1100111 ), ( 1100111 , 1100112 ), ( 1100112 , 1100113 ), ( 1100113 , 1100114 ) while 1=1 begin update x set x.StateCode = a.StateInto , x.UpdateCount += 1 from @x as x join @a as a on a.StateFrom = x.StateCode if @@rowcount = 0 break end select * from @x |
8 май 14, 11:22 [15989863] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
create table #t_Inv ( id int identity primary key , DocId varchar(100) , StateCode char(7) constraint CHK_tInv_StateCode check (StateCode in ('1100110', '1100111', '1100112', '1100113', '1100114')) , StateCheck char(7) ); insert #t_Inv (DocId, StateCode, StateCheck) values (1,'1100112','1100112'), (1,'1100110','1100110'), (1,'1100113','1100113'), (2,'1100110','1100110'), (3,'1100110','1100110'), (3,'1100112','1100112'), (3,'1100110','1100110'), (3,'1100114','1100114'), (3,'1100111','1100111'), (3,'1100113','1100113'), (3,'1100112','1100112'), (4,'1100112','1100112'), (5,'1100110','1100110'); create table #rules (id int identity(0,1) primary key, State_from char(7) unique, State_to char(7)); insert #rules (State_from, State_to) values ('1100113', '1100114'),('1100112', '1100113'),('1100111', '1100112'),('1100110', '1100111'),('1100114', '1100110'); update g set g.StateCode=r.State_to from ( select * , row_number()over(partition by i.DocId order by i.id desc)-1 npp from #t_Inv i where i.DocId in (1,2,3) )g join #rules r on r.id=(g.npp%5) select * from #t_Inv i order by i.DocId, i.id;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 май 14, 11:57 [15990171] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |