在对表进行更新时,我可以使用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,戴夫
答案 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
我对你的架构做了一些假设,因为它没有给出,但这应该让你开始。