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 SQL:如何进行条件更新_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server SQL:如何进行条件更新

Sql server SQL:如何进行条件更新,sql-server,sql-server-2008,Sql Server,Sql Server 2008,对不起,至少可以说这个标题不太好 在我的客户表中,我有4列电话号码:P1、P2、P3、P4。 我还有一个专栏,告诉我是否根本没有电话号码:值为1或0的NOPHONE(我知道这听起来很愚蠢,但说来话长,就是这样) 当我没有电话号码时,该值为1(它也有其原因) 现在,我要做的是,更新所有0的电话号码,并将值更改为NULL。。。除了那些NOPHONE=1(并且将有P1=P2=P3=P4=0)的记录之外,它们应该保持原样(即0) 如何在1 SQL语句中实现这一点 谢谢 使用CASE语句有条件地设置值。如

对不起,至少可以说这个标题不太好

在我的客户表中,我有4列电话号码:P1、P2、P3、P4。 我还有一个专栏,告诉我是否根本没有电话号码:值为1或0的NOPHONE(我知道这听起来很愚蠢,但说来话长,就是这样)

当我没有电话号码时,该值为1(它也有其原因)

现在,我要做的是,更新所有0的电话号码,并将值更改为NULL。。。除了那些NOPHONE=1(并且将有P1=P2=P3=P4=0)的记录之外,它们应该保持原样(即0)

如何在1 SQL语句中实现这一点


谢谢

使用
CASE
语句有条件地设置值。如果要保留当前值,只需将其设置为自身。
WHERE
子句检查是否至少需要更改一列

UPDATE CUSTOMER
SET
  P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END,
  P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END,
  P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END,
  P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END
WHERE NOPHONE = 0
  AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0)

您的
NOPHONE
逻辑似乎有倒退。直观地说,我希望
NOPHONE=1
表示没有可用的电话号码,但您的问题的措辞正好相反。

使用
CASE
语句有条件地设置值。如果要保留当前值,只需将其设置为自身。
WHERE
子句检查是否至少需要更改一列

UPDATE CUSTOMER
SET
  P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END,
  P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END,
  P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END,
  P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END
WHERE NOPHONE = 0
  AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0)
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0

您的
NOPHONE
逻辑似乎有倒退。直观地说,我希望
NOPHONE=1
表明没有可用的电话号码,但您的问题的措辞正好相反。

我认为您需要将此条件添加为well和NOPHONE=1@Yuck-这是一个打字错误,下一个帕拉格拉夫记对了。不管怎样,我纠正了它。这意味着您的语句应该说NOPHONE=0,对吗?谢谢。我想你需要添加这个条件asw well和NOPHONE=1@Yuck-这是一个打字错误,下一个帕拉格拉夫记对了。不管怎样,我纠正了它。这意味着您的语句应该说NOPHONE=0,对吗?谢谢
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0