SQL根据特定条件更新一列

时间:2012-07-24 21:33:46

标签: sql-server-2008 sql-update criteria

我有一个SQL表,如果其他列中包含数据,则需要在此表中添加BIT"IsComplete"

IsComplete最初由应用程序中的复选框处理,我想将责任转移到SQL DB以处理将此“IsComplete”列设置为true,具体取决于以下内容:

IsComplete = true if column1 = [something] and column2 = [something] and column3 = [something]
IsComplete = false if column1, column2 or column3 is null or = [nothing]

我如何做到这一点。

5 个答案:

答案 0 :(得分:0)

您可以执行更新

Update tableBlah setComplete = 0

Update tableBlah setComplete = 1 where column1 = [something] and column2 = [something] and column3 = [something]

在插入时,在该表上有一个触发器来执行相同的操作。

答案 1 :(得分:0)

我不确定你的问题,我想我错过了什么。 无论如何,如果这是我的想法,你可以使用Case语句

update T set IsComplete = CASE WHEN column1 = something and column2 = something
and column2 = something THEN 1 
WHEN column1 != [Something] OR column2 != [Something] OR column3 != [Something] THEN 0 END
from yourTable T --Your where criteria goes Here, if you need it

此答案认为yourTable有3列,列Something,考虑到每行的值,您会更新IsComplete

答案 2 :(得分:0)

你也可以有一个计算列。

只需创建一个函数来接收3个参数,如果3个参数不为空,则返回True,否则返回False。

然后创建列IsCOmplete,并将其设置在Computed Column Specification

在公式中使用dbo.Yourfunction(column1,column2,column3)

答案 3 :(得分:0)

update Table SET IsComplete = ISNULL(DATALENGTH(COALESCE(col1,col2,col3)) % 1) + 1,0);

应该做的伎俩。

What is coalesce

What is isnull

What is datalength

What is %

答案 4 :(得分:-1)

用例

SET IsComplete = CASE 
WHEN NULLIF(column1,'') IS NULL OR NULLIF(column2,'') is null 
or NULLIF(column3,'') is null THEN 0 
ELSE 1   
END

回答下面对INSERT的评论:

INSERT INTO TABLE1 (IsComplete) 
SELECT CASE 
    WHEN NULLIF(@column1,'') IS NULL OR 
    NULLIF(@column2,'') is null or 
    NULLIF(@column3,'') is null THEN 0 
    ELSE 1     
    END