Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 Server_Sql Server 2008 R2_Sql Update - Fatal编程技术网

Sql server 在不循环的情况下更新多行

Sql server 在不循环的情况下更新多行,sql-server,sql-server-2008-r2,sql-update,Sql Server,Sql Server 2008 R2,Sql Update,我希望在update语句中一次更新多行,而不使用循环 我有下表和一些记录,如下所示: 表: create table test ( col1 int, col2 int, col3 varchar(20), col4 datetime, name varchar(max) ); 插入: insert into test values(111,999,'A101','2014-01-01',''); insert into test values(112,998,'A102','2014-01-

我希望在update语句中一次更新多行,而不使用循环

我有下表和一些记录,如下所示:

表:

create table test
(
col1 int,
col2 int,
col3 varchar(20),
col4 datetime,
name varchar(max)
);
插入:

insert into test values(111,999,'A101','2014-01-01','');
insert into test values(112,998,'A102','2014-01-02','');
insert into test values(113,997,'A103','2014-01-03','');
insert into test values(114,996,'A104','2014-01-04','');
insert into test values(111,999,'A101','2014-01-01','');
insert into test values(114,996,'A104','2014-01-04','');
insert into test values(115,995,'A105','2014-01-05','');
insert into test values(116,994,'A106','2014-01-06','');
现在,我想更新特定日期的名称,例如,如下所示:

更新
name
D1,更新日期为
2014-01-01
2014-01-02

更新
name
D2,更新日期为
2014-01-04
2014-01-06

预期结果表

col1    col2    col3            col4             name
-------------------------------------------------------
111     999     A101    2014-01-01 00:00:00.000  D1
112     998     A102    2014-01-02 00:00:00.000  D1
113     997     A103    2014-01-03 00:00:00.000  
114     996     A104    2014-01-04 00:00:00.000  D2
111     999     A101    2014-01-01 00:00:00.000  D1
114     996     A104    2014-01-04 00:00:00.000  D2
115     995     A105    2014-01-05 00:00:00.000  D2

注意:如何在单个update语句中将上述名称更新到特定日期而不循环。

我可以想象的一种方法(可能不是最快的方法)是使用带有CASE语句的update

UPDATE  test
SET     name = CASE WHEN col4 BETWEEN '2014-01-01' AND '2014-01-02' THEN 'D1'
                    WHEN COL4 BETWEEN '2014-01-04' AND '2014-01-06' THEN 'D2'
                    ELSE name --Keeps que old value if doesn't match any case statement
               END

我已经在这里进行了测试,它完全按照您需要的方式工作。

我无法正确使用它。你到底想在“姓名”列中写什么?这是基于日期的模式还是像你的例子一样,你会把D1、D2等作为名字,但日期可能会有所不同?@RafaelMerlin,请查看更新后的帖子。预期的结果已经显示出来了。是的!非常感谢你。