2015-04-14 92 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为什么你使用循环来进行这样的更新? –