我有一张桌子:
ID Code1 Code2 Result
1 2201 123
2 1474 173
3 5478 103
4 4147 748
5 4147 123
我想填充结果,以便首先在ID = 3&amp;中生成<cat>
4
然后在下一次更新中,它应该在ID = 4&amp;中生成<dog>
。 5,现在因为ID 4已经<cat>
,所以它必须保留此消息并添加新的<dog>
。
注意:我必须这样做两(2)个更新语句。
预期结果:
ID Code1 Code2 Result
1 2201 123 NULL
2 1474 173 NULL
3 5478 103 <cat>
4 4147 748 <cat> <Dog>
5 4147 123 <dog>
这是我尝试的显然是错误的,请帮助
declare @error1 varchar(100)
set @error1 = '<Cat>'
update #tblA
set error = @error1
from #tblA
where ID in (3,4)
declare @error2 varchar(100)
set @error2 = '<Dog>'
update #tblA
set error = @error1 +'+'+@error2
from #tblA
where id in (4,5)
谢谢!
答案 0 :(得分:4)
试试这个:
UPDATE MyTable
SET [Result]= ISNULL([Result],'') + '<Cat>'
WHERE ID IN (3,4);
UPDATE MyTable
SET [Result]= ISNULL([Result],'') + '<Dog>'
WHERE ID IN (4,5);
答案 1 :(得分:4)
为什么必须在两个更新语句中?
UPDATE dbo.MyTable
SET [Result] = COALESCE([Result], '')
+ CASE WHEN ID IN (3,4)
AND [Result] NOT LIKE '%<Cat>%'
THEN '<Cat>' ELSE '' END
+ CASE WHEN ID IN (4,5)
AND [Result] NOT LIKE '%<Dog>%'
THEN '<Dog>' ELSE '' END
WHERE ID IN (3,4,5);
答案 2 :(得分:1)
第二次更新不需要知道关于第一次实际执行的操作的任何特殊内容,只是为了保留列的值(可以清除它以不执行整个'+'的操作)。事实上,第一种可以用同样的方式编写。
declare @error1 varchar(100)
set @error1 = '<Cat>'
update #tblA
set error = @error1
from #tblA
where ID in (3,4)
declare @error2 varchar(100)
set @error2 = '<Dog>'
update #tblA
set error = COALESCE(error, '') +'+'+@error2
from #tblA
where id in (4,5)