одна), а если 2 поля?
2 переменные?
SET @Variable = (SELECT TOP 1....)
спс) уже понял
начнем с замечаний. 1. очень попахивает низкой квалификацией и попыткой решить производственные задачи руками сообщества. Помимо нечистоплотности (зарплату вам платят и с сообществом вы вряд ли поделитесь), это влечет за собой еще и хреновый результат. 2. в коде как понимаю есть ошибка. если правильно понимаю, то процедура должна возвращать механика с наибольшим количеством ремонтов? е5сли так, то направление надо указать обратное, а то наоброт возвращает худшего (а таких небось будет много - отпускники, уволенные и т.п.) 3. в коде не решен вопрос как быть если два механика выполнили одинаковое количество ремонтов (у каждого, например по 5 ремонтов - кого возвращаем?) если не добавить дополнительной сортировки, то в некоторых случаях результат будет меняться и это фиаско. столбить надо обязательно!!! например по айдишнику пользователя (в этом даже и смысл есть бизнесовый - поощряем в первую очередь молодых сотрудников), но эти правила лучше бы с бизнесом согласовать 4. отдельные товарищи предлагают написать один и тот же код дважды. Если мой сотрудник такое творит, то он делает очень серьезный шаг к своему увольнению!!! - Ваш запрос в определенных случаях может оказаться тяжелым для системы. и вы собираетесь его выполнять дважды - даже у вас стиль оформления кода таков, что логика не вполне очевидна. А доработки потребуются (например, я вам накинул в пп 2 и 3) и вам придется повторить одни и те же доработки в двух местах (как показывает практика, разработчики при необходимости код продублировать, в 10% случаев забывают это делать, или делают с ошибками). лечить это можно временными таблицами или табличными переменными. например: declare @tempTable table ( field1 int , field2 nvarchar(50) ); declare @var1 int , @var2 nvarchar(50); set nocount on; /* начало наполнения данными временной таблицы, этот запрос может быть тяжелым! */ insert into @tempTable select field1 , field2 from workTable; /* окончание потенциально тяжелого запроса */ select top 1 -- получаем данные из времянки, запрос потенциально легчайший, т.к. обрабатываем уже готовый результат @var1 = field1 , @var2 = field2 from @tempTable order by field3; set nocount off; -- возвращаем тютелька в тютельку результат первого тяжелого запроса тоже легчайший, т.к. нет обращения к рабочим таблицам, все что нужно было сделано в самом начале select * from @tempTable; есть и другие варианты, которые я приемлю
Обсуждают сегодня