我可以使用Update命令中的output子句生成2行

时间:2014-07-23 12:08:03

标签: sql sql-server sql-server-2008

在对表进行更新时,我可以使用OUTPUT生成前后行值。我可以将这些值放在表格中。

但他们只用一排进入桌面。

我需要将前面的值作为一行,将后面的值作为新行。

所以此片段暂时不适合我,但它显示了我想要做的事情。有没有办法使用OUTPUT执行此操作。

update dbo.table1
set employee = employee + '_updated'
OUTPUT 'd',DELETED.* INTO dbo.table2,
OUTPUT 'i',INSERTED.* INTO dbo.table2,
WHERE id = 4 OR id = 2;

下面的代码段有效,但只创建一行:

update dbo.table1
set employee = employee + '_updated'
OUTPUT 'd', DELETED.*, 'i', INSERTED.* INTO dbo.table2,
WHERE id = 4 OR id = 2;

我可以使用触发器来做,但在这种情况下不允许这样做。

我可以手动完成(选择我要更新到table2中,然后进行更新......)

有关如何仅使用更新中的OUTPUT进行操作的任何提示或提示?

Rgds,戴夫

1 个答案:

答案 0 :(得分:1)

详细说明评论中给出的答案:

declare @TempTable table (
    d_id int, 
    d_employee varchar(50),
    d_other varchar(50),
    u_id int,
    u_employee varchar(50),
    u_other varchar(50)
)

update Table1
set employee = employee + '_updated'
output deleted.id d_id, deleted.employee d_employee, deleted.other d_other, 
    inserted.id u_id, inserted.employee u_employee, inserted.other u_other
    into @TempTable
where id = 4 or id = 2;

insert Table2 (change_type, employee_id, employee, other)
select
    'd',
    d_id,
    d_employee,
    d_other
from @TempTable

union all

select
    'i',
    u_id,
    u_employee,
    u_other
from @TempTable

我对你的架构做了一些假设,因为它没有给出,但这应该让你开始。

相关问题