嘗試整理表格結構像(保持關注[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