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

Откуда: Кемеровская обл.
Сообщений: 250
Ситуация: при втавки значений в таблицу, нужно в зависимости от некоторых обсоятельств, изменить вставляемое значение.
Т.е., например, добавляется в таблицу строка, в поле Поле1 вставляется значение 0101010, нам нужно, если поле2 = 'Купля', вставить в Поле1 B0101010, иначе - S0101010.
Пробовал триггер:
	update inserted
	set Номер = case Операция when 'Купля' then 'B'+Номер else 'S'+Номер end
ругается сиквел)))
15 окт 09, 06:23    [7788304]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
inserted - изменять нельзя!

Триггер вешайте на саму таблицу и её саму изменяйте
15 окт 09, 06:27    [7788305]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
DionX
Member

Откуда: Кемеровская обл.
Сообщений: 250
	update ИмпортСделок
	set ИмпортСделок.Номер = case ИмпортСделок.Операция when 'Купля' then 'B'+ИмпортСделок.Номер else 'S'+ИмпортСделок.Номер end
	from ИмпортСделок
	inner join inserted on ИмпортСделок.Номер = inserted.Номер
						and Left(ИмпортСделок.Номер,1) in ('0','1','2','3','4','5','6','7','8','9')
15 окт 09, 06:47    [7788309]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вместо
Left(ИмпортСделок.Номер,1) in ('0','1','2','3','4','5','6','7','8','9')
можно написать
ИмпортСделок.Номер LIKE '[0-9]%'
- пошустрей однако будет - индекс задействуется.
15 окт 09, 06:56    [7788317]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
aleks2
Guest
Может НЕ париться с триггерами по столь незначительному поводу?
Вычисляемое поле и... вот оно - щастье.
15 окт 09, 07:01    [7788319]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
DionX
Member

Откуда: Кемеровская обл.
Сообщений: 250
tpg
Вместо
Left(ИмпортСделок.Номер,1) in ('0','1','2','3','4','5','6','7','8','9')
можно написать
ИмпортСделок.Номер LIKE '[0-9]%'
- пошустрей однако будет - индекс задействуется.

Ни фига себе!)))) правда удивлен на счет
LIKE '[0-9]%'
15 окт 09, 07:08    [7788323]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
DionX
Member

Откуда: Кемеровская обл.
Сообщений: 250
aleks2
Вычисляемое поле и... вот оно - щастье.

Думал над этим, но... Я не очень селен в транзакт-скл, да и практики давно не было. Можно это заложить в вычисляемое поле:
	update ИмпортСделок
	set ИмпортСделок.Номер = 
		case ИмпортСделок.Операция 
		when 'Купля' 
		then 'B'+left(ИмпортСделок.Номер, case patindex('%.%',ИмпортСделок.Номер) when 0 then len(ИмпортСделок.Номер) else patindex('%.%',ИмпортСделок.Номер)-1 end) 
		else 'S'+left(ИмпортСделок.Номер, case patindex('%.%',ИмпортСделок.Номер) when 0 then len(ИмпортСделок.Номер) else patindex('%.%',ИмпортСделок.Номер)-1 end)
		end
	from ИмпортСделок
	inner join inserted on ИмпортСделок.Номер = inserted.Номер
						and Left(ИмпортСделок.Номер,1) in ('0','1','2','3','4','5','6','7','8','9')
Если ДА, то пример....
15 окт 09, 07:10    [7788326]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
DionX
Member

Откуда: Кемеровская обл.
Сообщений: 250
Почитал про LIKE http://msdn.microsoft.com/ru-ru/library/ms179859.aspx , много полезного узнал))) Я, конечно, ваще то про этот оператор знал, но о всей гибкости возможных шаблонов не подозревал)))
15 окт 09, 07:14    [7788330]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
aleks2
Guest
CREATE TABLE [тря-ля-ля] (
	...
	[ПолныйНомер] AS 
         CASE 
		WHEN Left(Номер,1) between '0' AND '9' THEN
			CASE Операция
				WHEN 'Купля' THEN 'B'
				ELSE 'S'
			END
		ELSE
                   ''
	 END + Номер
	)
)
15 окт 09, 07:25    [7788342]     Ответить | Цитировать Сообщить модератору
 Re: Изменить вставляемые данные  [new]
DionX
Member

Откуда: Кемеровская обл.
Сообщений: 250
Большое спасибо всем ответимшим)
15 окт 09, 12:18    [7790066]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить