2013-03-01 5 views
0

У меня есть хранимая процедура, которая выполняет 2 обновления, но я хочу только сделать первое обновление, если параметр @active равен 'Y'.Состояние в хранимой процедуре

alter procedure sp_updateThis 
@something varchar(5), 
@active char(1) 
as begin 
-- check to see if active and do the update 
update myTable set [email protected] 

-- run this one regardless 
update yourTable set [email protected] 
+2

ты пытаясь обновить каждую строку в таблице или определенную строку? –

+0

Также [используйте префикс схемы] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/bad-habits-to-kick-avoiding-the-schema-prefix.aspx) и [ не используйте 'sp_' для имен хранимых процедур] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). –

+0

Спасибо Аррон за ссылку! Я предполагаю, что я делаю это по-старому :(Я всегда учил префикс всем –

ответ

4

Попробуйте изменить эту последнюю строку с этим:

if (@active = 'Y') 
begin 
    update yourTable set [email protected] 
end 
+0

Как только заявил Аарон Бертран, это обновление будет обновлять КАЖДУЮ строку в этой таблице. Если это не намеченный результат, обязательно добавьте 'WHERE' в вашем обновлении! –

+0

Да, спасибо, это был всего лишь пример. У меня есть мои заявления на месте :) Начало и конец - это то, чего я отсутствовал! еще раз спасибо! –

+0

@TanyaXrum - 'BEGIN ... END' является необязательным для отдельных операторов. –

2
alter procedure sp_updateThis 
@something varchar(5), 
@active char(1) 
as begin 
-- check to see if active and do the update 
if(@active = 'Y') 
Begin 
update myTable set [email protected] 
End 

-- run this one regardless 
update yourTable set [email protected] 
+0

Он хочет состояние второго обновления ... –

+0

@AdamPlocher - Да в соответствии с текстом вопроса. Нет в соответствии с комментарием кода. –

+1

Я знаю. Я был смущен вопросом и комментариями к коду. Я просто обошел комментарии. – Ron

1

Если вы действительно пытаетесь обновить каждую строку в таблице:

update myTable set [email protected] where @active = 'Y'; 

В противном случае вы, вероятно, хотите дополнительные статьи ...

0

Вы можете создать процедуру, как это: создать процедуру, sp_updateThis @something VARCHAR (5), @active обугленного (1) AS Begin

если @active = 'у' начинают обновления yourTable множество, = @ что-то конец еще обновление MYTABLE установить это = @ то обновления yourTable набор, = @ что-то

конец пойти

Смежные вопросы