2011-09-14 37 views
0

我有一個表:SQL服務器:限定可變

ID Code1 Code2 Result 
1 2201 123 
2 1474 173 
3 5478 103 
4 4147 748 
5 4147 123 

我要填充的結果,例如,它應該首先生成在ID <cat> = 3 然後在下次更新它應該在ID生成<dog> = 4 & 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 +'+'[email protected] 
from #tblA 
where id in (4,5) 

謝謝!

+2

你能解釋爲什麼它必須在兩個更新語句中? –

+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); 
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); 
+0

,因爲這兩個更新由不同的存儲過程處理。爲了簡化我說的「兩個」更新陳述的問題。我得到期望的結果壽。謝謝 –

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, '') +'+'[email protected] 
from #tblA 
where id in (4,5)