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

Откуда: Москва
Сообщений: 238
Здравствуйте.
Есть простой запрос типа:
CREATE PROC [dbo].[sp_Поиск] 
	@strКонтекст	varchar(20) = NULL,
	@Условие		int = NULL		
AS
	INSERT INTO [dbo].[table2]
			(Nзаявки,Артикул,НоменклатурныйНомер,Название )
	SELECT c.Nзаявки, c.Артикул, c.НоменклатурныйНомер, c.Название
		FROM table1 c
		WHERE c.Nзаявки = @strКонтекст
GO
Нужно, чтобы в зависимости от условия отбор делался по разным полям, т.е. в одном случае
WHERE c.Артикул = @strКонтекст
в другом
WHERE c.Название = @strКонтекст
и т.д. Не подскажете, как это сделать?
30 май 17, 15:44    [20524039]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать "переменное поле"?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
l-evgene,
ну можно
WHERE 
(@Условие = 1 AND strКонтекст	= @strКонтекст) OR
(@Условие = 2 AND c.Nзаявки      = @strКонтекст) 
30 май 17, 15:49    [20524066]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать "переменное поле"?  [new]
msLex
Member

Откуда:
Сообщений: 7726
если никаких индексов по полям Артикул и Nзаявки нет, то прямо в лоб

WHERE 
case when %условие% then c.Артикул else c.Название end = @strКонтекст



если индексы есть, то

select ...
where %условие 1% and c.Артикул = @strКонтекст
union all
select ...
where %условие 2% and c.Название = @strКонтекст

Важно, чтобы %условие 1% и %условие 2% были взаимоисключающими, иначе есть шанс задвоить записи
30 май 17, 15:52    [20524097]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать "переменное поле"?  [new]
l-evgene
Member

Откуда: Москва
Сообщений: 238
TaPaK, msLex, спасибо, получилось!
30 май 17, 17:43    [20524695]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить