cho SQL Server 2005 trở lên, thử OUTPUT Clause (Transact-SQL) khoản:
DELETE OldTable
OUTPUT DELETED.col1, DELETED.col2...
INTO NewTable
WHERE ID=...
dụ làm việc:
DECLARE @OldTable table(col1 int, col2 varchar(5), col3 char(5), col4 datetime)
DECLARE @NewTable table(col1 int, column2 varchar(5), col3 int , col_date char(23), extravalue int, othervalue varchar(5))
INSERT @OldTable VALUES (1 , 'AAA' ,'A' ,'1/1/2010' )
INSERT @OldTable VALUES (2 , 'BBB' ,'12' ,'2010-02-02 10:11:22')
INSERT @OldTable VALUES (3 , 'CCC' ,null ,null )
INSERT @OldTable VALUES (4 , 'B' ,'bb' ,'2010-03-02' )
DELETE @OldTable
OUTPUT DELETED.col1
,DELETED.col2
,CASE
WHEN ISNUMERIC(DELETED.col3)=1 THEN DELETED.col3
ELSE NULL END
,DELETED.col4
,CONVERT(varchar(5),DELETED.col1)+'!!'
INTO @NewTable (col1, column2, col3, col_date, othervalue)
OUTPUT 'Rows Deleted: ', DELETED.* --this line returns a result set shown in the OUTPUT below
WHERE col1 IN (2,4)
SELECT * FROM @NewTable
OUT PUT:
col1 col2 col3 col4
-------------- ----------- ----- ----- -----------------------
Rows Deleted: 2 BBB 12 2010-02-02 10:11:22.000
Rows Deleted: 4 B bb 2010-03-02 00:00:00.000
(2 row(s) affected)
col1 column2 col3 col_date extravalue othervalue
----------- ------- ----------- ----------------------- ----------- ----------
2 BBB 12 Feb 2 2010 10:11AM NULL 2!!
4 B NULL Mar 2 2010 12:00AM NULL 4!!
(2 row(s) affected)
Nguồn
2010-05-13 19:14:35
@KM: +1. Tôi đã không nhận thức được điều này. Bạn có đề xuất phương pháp này qua 'INSERT' và' DELETE' không? –
Tôi sẽ sử dụng điều này trên một INSERT và DELETE mỗi lần, SQL Server có thể tối ưu hóa nó tốt hơn và nó đảm bảo bạn INSERT và DELETE chỉ các hàng tương tự, không nhiều hơn và không kém. –
Đây là một tuyên bố, vì vậy ... không có giao dịch cần thiết, tôi đoán? – lance