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

Откуда:
Сообщений: 184
Доброго времени суток ! Создал таблицу users

FirstName     LastName     Age
 A               A          20
 B               B          21
 C               C          22
 D               D          21
 E               E          20


Затем создал процедуру maincProc где пытаюсь проверить Age и запустить другие процедуры :
SELECT @firstName = FirstName ,lastName = LastName ,@age = Age FROM dbo.users
if @age = 20
exec myProc1 'firstName','LastName'
if @age = 21
exec myProc2 'firstName','LastName'
if @age = 22
exec myProc3 'firstName','LastName'


При запуске процедуры maincProc параметры всей таблицы не проверяются , поэтому работает только первая часть
if @age = 20
exec myProc1 'firstName','LastName'

Помогите пожалуйста решить задачку, желательно без курсора
2 сен 13, 11:56    [14783253]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
чч
Guest
NewBie77,

Если без курсора, то надо выводить логику из ваших myProc1, myProc2, myProc3 в процедуру maincProc и обрабатывать таблицу целиком, а не по одной записи.
2 сен 13, 12:01    [14783276]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
Не совсем понятно что делают процедуры myProc1... myProcN + Может быть возможно их заменить на inline ф-ции?
2 сен 13, 12:02    [14783286]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

Откуда:
Сообщений: 184
_djХомяГ,

Они посылают письма по разным случаям разным людям
2 сен 13, 12:05    [14783300]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
автор
SELECT @firstName = FirstName ,lastName = LastName ,@age = Age FROM dbo.users

Это Вы так SELECT написали (тогда что он вернет) или это "какой то незаконченный фрагмент" описаня курсора?
2 сен 13, 12:11    [14783342]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

Откуда:
Сообщений: 184
_djХомяГ,

Я пытаюсь написать без курсора но никак не придумал, поэтому прошу помощи на форуме
2 сен 13, 12:13    [14783361]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
Ну как пример взять сконкотенировать соотв образом строки адресов для всех возможных возрастов которые перечислены в if'ах и если позволяет логика послать одно и то же письмо пользователям с одинаковым возарстом
т е условно
select @mail20=<конкатенация> from таблциа where age=20 for xml path()
select @mail21=<конкатенация> from таблциа where age=21 for xml path()
select @mail21=<конкатенация> from таблциа where age=22 for xml path()
if @mail20<>''
exec myProc1 @mail20
if @mail21<>''
exec myProc2 @mail21
Но это громоздко и возможно требуебся не тот эффект и нербходимость либо переработки myproc или как гворилось выше отказа от нтх и переноса логики в mainproc - чем курсор то не устроил
2 сен 13, 12:27    [14783438]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

Откуда:
Сообщений: 184
_djХомяГ,

Я новичок в этом деле , сказали что курсор замедлит процесс. Если вам не сложно можете с помощью курсора написать ?
2 сен 13, 12:34    [14783509]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
к примеру
declare 
@firstname varchar(300),
@lastname varchar(300),
@age       tinyint
declare cur cursor for 
        select  FirstName ,lastName,Age from таблица
open curDeal

fetch next from cur  into @firstname,@lastname,@age
while (@@fetch_status = 0)
begin
    /*
            тут  логика if и exec myProc1...N


      */  
    
     fetch next from cur  into @firstname,@lastname,@age
end 
close cur
deallocate cur
2 сен 13, 12:41    [14783557]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
Ошибочка
open cur
2 сен 13, 12:43    [14783567]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

Откуда:
Сообщений: 184
_djХомяГ,

спасибо
2 сен 13, 12:44    [14783583]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
FAST_FORWARD тогда уж получше будет...

Но самое лучшее - переписать процедуры для работы с таблицей в целом.
2 сен 13, 12:45    [14783592]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
чч
Guest
А я все-таки не понимаю зачем тут городить цикл, курсоры, если можно обработать всю таблицу за раз.
Можно case написать, можно отдельное поле завести и делать update. Можно вычисляемое поле завести. Раздолье, но автор почему-то выбирает самое худшее решение работы с таблицей. Может быть тогда уж на клиенте это все делать, раз нет разницы?
2 сен 13, 13:53    [14784151]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

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

Можете дать пример ? Например через case в данном случае ?
2 сен 13, 14:03    [14784226]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
_djХомяГ
Guest
чч
А я все-таки не понимаю зачем тут городить цикл, курсоры, если можно обработать всю таблицу за раз.
Можно case написать, можно отдельное поле завести и делать update. Можно вычисляемое поле завести. Раздолье, но автор почему-то выбирает самое худшее решение работы с таблицей. Может быть тогда уж на клиенте это все делать, раз нет разницы?



Мы вообще гадаем т к автор не говорит что именно надо произвести (как понимаю рассылка писем) И тут начинаются аопросы связанные с конкретикой задачи
2 сен 13, 14:07    [14784246]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
чч
Guest
NewBie77,

SELECT 
case age when 20 then 'Что-то делаем, что в myProc1'
		when 21 then 'Что-то делаем, что в myProc2'
		when 22 then 'Что-то делаем, что в myProc3'
		else
			'Абырвал'
		end      
FROM dbo.users
2 сен 13, 14:30    [14784381]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
igor_ku
Member

Откуда:
Сообщений: 129
Извините за мои 5 копеек... Немного офтоп вопроса...
А разве хорошо хранить возраст в таблице? Это же calculated значение, причем его пересчитывать в таблице dbo.users нужно каждый день. ИМХО, хранить дату рождения куда правильнее архитектурно, нет? Или это был просто пример?
2 сен 13, 18:35    [14786115]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
Гость333
Member

Откуда:
Сообщений: 3683
igor_ku
ИМХО, хранить дату рождения куда правильнее архитектурно, нет?

Вы совершенно правы!
3 сен 13, 09:19    [14787623]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
NewBie77
Member

Откуда:
Сообщений: 184
igor_ku
Извините за мои 5 копеек... Немного офтоп вопроса...
А разве хорошо хранить возраст в таблице? Это же calculated значение, причем его пересчитывать в таблице dbo.users нужно каждый день. ИМХО, хранить дату рождения куда правильнее архитектурно, нет? Или это был просто пример?


Я просто для примера написал
3 сен 13, 17:24    [14790635]     Ответить | Цитировать Сообщить модератору
 Re: Запуск хранимых процедур с проверкой  [new]
o-o
Guest
Гость333
igor_ku
ИМХО, хранить дату рождения куда правильнее архитектурно, нет?

Вы совершенно правы!

может это список умерших,
и его распечатывают в виде статистики, кто во сколько лет помер.
тогда и возраст сойдет.
ну или какая другая статистика, кто в каком возрасте в школу бальных танцев записался
3 сен 13, 17:48    [14790802]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить