只需稍微更改您的查询,但您没有获得其他评论数据,因为这些新记录不存在于您的任务表中。因此,您必须从 TaskComment 表中插入这些新记录。
UPDATE
Task
SET
[Description] = TMC.Comment
FROM
Task t
INNER JOIN
TaskComment TMC
ON
t.Id = TMC.TaskId
WHERE
t.AssignToId in (1,2,3)
要在 SQL Server 2008 中实现这一点,您可以使用 MERGE 语句,但由于您使用的是 SQL Server 2005,因此您可以使用另一种替代方法(想法取自此处 mimicking-merge-statement-in-sql),如下面的示例说明。
-- Create table1
CREATE TABLE Table1 (Col1 INT, Col2 INT, Col3 VARCHAR(100))
INSERT INTO Table1 (Col1, Col2, Col3)
SELECT 1, 11, 'First'
UNION ALL
SELECT 11, 12, 'Second'
UNION ALL
SELECT 21, 13, 'Third'
UNION ALL
SELECT 31, 14, 'Fourth'
GO
-- Create table2
CREATE TABLE Table2 (Col1 INT, Col2 INT, Col3 VARCHAR(100))
INSERT INTO Table2 (Col1, Col2, Col3)
SELECT 1, 21, 'Two-One'
UNION ALL
SELECT 11, 22, 'Two-Two'
UNION ALL
SELECT 21, 23, 'Two-Three'
UNION ALL
SELECT 31, 24, 'Two-Four'
UNION All
SELECT 21, 33, 'Two-Six'
UNION ALL
SELECT 31, 34, 'Two-Nine'
GO
SELECT *
FROM Table1
SELECT *
FROM Table2
GO
declare @updated_ids table(col2 int)
UPDATE Table1
SET Col2 = t2.Col2,
Col3 = t2.Col3
output inserted.col2 into @updated_ids
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.Col1 = t2.Col1
WHERE t1.Col1 IN (21, 31)
insert into Table1
select col1, col2, col3 from Table2
where col2 not in(select col2 from @updated_ids)
go
DROP TABLE Table1
DROP TABLE Table2
所以在你的情况下,你应该做类似的事情
declare @updated_ids table(id int)
UPDATE
Task
SET
[Description] = TMC.Comment
output inserted.Id into @updated_ids
FROM
Task t
INNER JOIN
TaskComment TMC
ON
t.Id = TMC.TaskId
WHERE
t.AssignToId in (1,2,3)
insert into Task
select id,
taskid,
comments
from TaskComment
where taskid not in (select id from @updated_ids)
go