尝试整理表格结构像(保持关注[UID]):
create table [my_table]
(
[id] int
,[name] nvarchar(256)
,[phone] nvarchar(256)
);
insert into [my_table]
values (1, 'Brian', '123-456-7890');
create table [my_log]
(
[inserted_id] int
,[inserted_name] nvarchar(256)
,[inserted_phone] nvarchar(256)
,[deleted_id] int
,[deleted_name] nvarchar(256)
,[deleted_phone] nvarchar(256)
,[uid] uniqueidentifier primary key
);
然后将此解决您的问题:
update [my_table]
set [id] = 2
,[name] = 'James'
,[phone] = '222-222-2222'
output
[deleted].[id]
,[deleted].[name]
,[deleted].[phone]
,[inserted].[id]
,[inserted].[name]
,[inserted].[phone]
,newid()
into [my_log]
(
[inserted_id]
,[inserted_name]
,[inserted_phone]
,[deleted_id]
,[deleted_name]
,[deleted_phone]
,[uid]
);
select
[id] = [id]
,[name] = [name]
,[phone] = [phone]
,[op_type] = CASE [op_type] WHEN 0 THEN 'Insert' ELSE 'Delete' END
from
(
select
[id] = [inserted_id]
,[name] = [inserted_name]
,[phone] = [inserted_phone]
,[op_type] = 0 -- insert
,[uid] = [uid]
from
[my_log]
union
select
[id] = [deleted_id]
,[name] = [deleted_name]
,[phone] = [deleted_phone]
,[op_type] = 1 -- delete
,[uid] = [uid]
from
[my_log]
) as [l]
order by
[l].[uid]
,[l].[op_type] ASC;
请发布[最小,Co完整和可验证的例子](http://stackoverflow.com/help/mcve)也检查[如何问](http://stackoverflow.com/help/how-to-ask)。 – wdosanjos
为什么你首先有这样的表结构?在同一行上使用'Inserted_ID'和'Deleted_ID'似乎“奇怪”。这两者之间是否有任何实际/自然的关系? –
嗨@srutzky。这只是一个例子。这不是我的数据库中的真正表格。另外,当使用带有UPDATE语句的OUTPUT子句时,SQL Server允许我们显示插入的记录和已删除的记录。 – Solution