2015-04-14 129 views
-2

我需要一個存儲過程,根據條件更新表上的錯誤消息列,如果dob爲null或大於當前日期,那麼錯誤消息列應該更新爲'invalid dob '並且還基於它必須被更新的id,如果dob小於當前日期並且它不爲空,則不應該更新錯誤消息列。我需要這個查詢的更新語句,我試過了,但它沒有檢查條件就更新了所有的列。所以請爲此查詢提供解決方案,謝謝。根據條件需要更新查詢

+0

能否請您發佈一些樣本數據,預期輸出,無論您有試過嗎? –

+0

update e set errormsg ='invalid dob'from emp e where eid = eid and exists(select'x'from emp where dob> getdate()or dob is null) – Ram

+0

請更新原始文章。同時發佈預期的輸出。 –

回答

0

奇怪的要求,但它非常簡單。

update SomeTable 
set ErrorMessage = 'Invalid DOB' 
where DOB is null 
or DOB > getdate() 
+0

如果我使用條件eid = eid,那麼它會更新所有列而不檢查條件,它爲什麼會發生? – Ram

+0

你爲什麼要包含謂詞?這就像說1 = 1。所有的行都符合這個標準。除非希望更新所有行,否則請使用where子句僅允許要更新的行更新。 –

+0

此代碼是基於設置的。它將在沒有循環或遊標的情況下更新所有相關行。 –

0

嘗試這樣的事情,

create table TestEmployee (ID int, DOB DateTime, ErMsg varchar(20)) 
insert into TestEmployee (ID,DOB) 
values (1, '10/02/2013'), 
(2, null), 
(3, '1/1/2016') 

UPDATE TestEmployee SET ErMsg = 'Invalid DOB' 
WHERE ID = @ID AND --This should based on your condition 
DOB > GETDATE() OR DOB IS NULL 

SELECT * FROM TestEmployee 

Sql Fiddle Demo

+0

我使用循環條件將值插入到該表中,因此,而不是使用@id,我可以直接定義類似id = id的內容嗎? – Ram

+0

請在這裏發佈您的整個SP。 –

+0

@Ram爲什麼你使用循環來進行這樣的更新? –