首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件地更新多列

有条件地更新多列
EN

Stack Overflow用户
提问于 2015-12-10 12:17:35
回答 3查看 106关注 0票数 0

日安!我目前在更新我的数据库方面遇到了困难。我正在使用c#.net编写代码并使用SQL server。

我的问题是,我试图有条件地更新多个列。这是我的密码:

代码语言:javascript
复制
"Update Eureka Set Milestone1 = Case When Milestone1 = '" + araw.Text + "' then Milestone_status = '" + m1 + "' End, Milestone2 = When Milestone2 = '" + araw.Text + "' then Milestone_status = '" + m2 + "' End, Milestone3 = When Milestone3 = '" + araw.Text + "' Then Milestone_status = '" + m3 + "' End, Milestone4 = When Milestone4 = '" + araw.Text + "' Then Milestone_status = '" + m4 + "' End, Milestone5 = When Milestone5 = '" + araw.Text + "' Then Milestone_status = '" + m5 + "' End Where Eureka_id = '" + eid.Text + "'"

如果Milestone1等于今天的日期(araw.text),那么里程碑状态将被更改。否则,milestone_status将不会被更改。milestone2到milestone5的情况也是如此。

我的代码是SQL语句不工作。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-10 12:44:27

尝试;

代码语言:javascript
复制
Update Eureka 
Set Milestone_status = 
    Case 
        When Milestone1 = @araw_Text then @m1
        when Milestone2 = @araw_Text then @m2
        when Milestone3 = @araw_Text then @m3
        when Milestone4 = @araw_Text then @m4
        when Milestone5 = @araw_Text then @m5
        else Milestone_status
    end
Where Eureka_id = @eid_Text

这将更新

Milestone_statusm1,if Milestone1 = araw.Text

Milestone_statusm2,if Milestone2 = araw.Text

Milestone_statusm3,如果Milestone3 = araw.Text..。

如果不满足任何条件,那么Milestone_status将不会被修改。

票数 1
EN

Stack Overflow用户

发布于 2015-12-10 12:27:34

将其从C#中删除,并将其单独考虑为SQL语句,只需简单地查看milestone1,您的SQL就必须如下所示:

代码语言:javascript
复制
UPDATE Eureka
   SET milestone_status = 
      CASE WHEN milestone1 = @todays_date then @m1
      ELSE milestone_status
      END

也就是说,如果milestone1是今天的日期,那么将milestone_status设置为@m1,否则将其设置为自身(即不要更改它)。

SQL有几个关于用例语法的好例子,为了清晰起见,可能也值得回顾一下:https://msdn.microsoft.com/en-us/library/ms181765.aspx

希望这有帮助

票数 1
EN

Stack Overflow用户

发布于 2015-12-10 12:30:13

您的CASE语句正在编写语法:

代码语言:javascript
复制
Update Eureka 
Set Milestone1 = Case When Milestone1 = 'araw.Text' then Milestone_status = 'm1' End
,   Milestone2 = When Milestone2 = 'araw.Text' then Milestone_status = 'm2' End
,   Milestone3 = When Milestone3 = 'araw.Text' Then Milestone_status = 'm3' End
,   Milestone4 = When Milestone4 = 'araw.Text' Then Milestone_status = 'm4' End
,   Milestone5 = When Milestone5 = 'araw.Text' Then Milestone_status = 'm5' End 
Where Eureka_id = 'eid.Text'

正确的语法必须类似于

代码语言:javascript
复制
CASE expression

   WHEN value_1 THEN result_1
   WHEN value_2 THEN result_2
   ...
   WHEN value_n THEN result_n

   ELSE result

END

在您的示例中,可以使用嵌套案例检查每个里程碑(Milestone1、Milestone2、.)

代码语言:javascript
复制
"Update Eureka
set Milestone_status = case when Milestone1 = '" + araw.Text + "' then '" + m1 + "' else 
                         case when Milestone2 = '" + araw.Text + "' then '" + m2 + "' else
                           case when Milestone3 = '" + araw.Text + "' then '" + m3 + "' else
                             case when Milestone4 = '" + araw.Text + "' then '" + m4 + "' else
                               case when Milestone5 = '" + araw.Text + "' then '" + m5 + "' else Milestone_status end
                              end
                            end                              
                          end
                        end
Where Eureka_id = '" + eid.Text + "'"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34201705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档