Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL根据特定条件更新一列_Sql Server 2008_Sql Update_Criteria - Fatal编程技术网

Sql server 2008 SQL根据特定条件更新一列

Sql server 2008 SQL根据特定条件更新一列,sql-server-2008,sql-update,criteria,Sql Server 2008,Sql Update,Criteria,我有一个SQL表,在这个表中有一个位列IsComplete,如果其他列中有数据,则需要设置它 IsComplete最初是由应用程序中的复选框处理的,我希望将责任转移到SQL DB,以处理基于以下内容将IsComplete列设置为true的问题: IsComplete = true if column1 = [something] and column2 = [something] and column3 = [something] IsComplete = false if column1, c

我有一个SQL表,在这个表中有一个位列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]

如何完成此操作。

您只需进行更新即可

Update tableBlah setComplete = 0

Update tableBlah setComplete = 1 where column1 = [something] and column2 = [something] and column3 = [something]
并在该表上设置触发器,以便在插入时执行相同的操作

用例

SET IsComplete = CASE 
WHEN NULLIF(column1,'') IS NULL OR NULLIF(column2,'') is null 
or NULLIF(column3,'') is null THEN 0 
ELSE 1   
END
请在下面回复您的评论,以便插入:

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

我不确定你的问题,我想我遗漏了什么。 无论如何,如果这是我想的,你可以使用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

这个答案考虑到你的表有3个列,一个列的东西,你会更新完整的,考虑每个行的值

你也可以有一个计算列。 只需创建一个函数来接收3个参数,如果3个参数不为null,则返回True,否则返回False

然后创建列IsCOmplete,并在计算列规范中设置它

在公式中使用dbo.Yourfunctioncolumn1、column2、column3

update Table SET IsComplete = ISNULL(DATALENGTH(COALESCE(col1,col2,col3)) % 1) + 1,0);
我们应该做到这一点


[something]是什么,数据库中某个表中的字段?[something]表示除空字符串或空白字符串以外的任何内容,我不确定如何声明easilyperform a select?你能解释一下吗好的,我早就知道了。谢谢大家我没有投你反对票。但是你的答案是不正确的,因为他在第一行说IsComplete在一个包含更多列的表中,而你在一个包含唯一字段的表中插入。另外,您正在更新,不考虑[某些东西],只考虑Null的不同。这可能是因为有一些字段不是空的,而不是[某物]。考虑到这是从应用程序中传递的一个参数。他把这篇文章贴到OP下面的评论中[某物]意味着什么,除了NULL或空白字符串,我不知道如何容易地声明,你的答案也不考虑Calnn= [某事1]。或者第2列=什么?Insert是示例代码,他问我如何为Insert执行该操作,他没有问如何在所有列中插入的问题。根据您对我答案的评论,这将不起作用。如果column1=something2和column2=something2和column3=something3怎么办?