使用DELETE與OUTPUT條款,這樣做在一個聲明:
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 /*top (1000)*/ @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
輸出:
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)
您可以使用TOP (...)
必要對其加以限制。
這真的很不錯..請解釋一下什麼是「TODO」的意思,我是否需要把我的t-sql查詢放在那裏.. – 1Mayur 2012-03-22 13:27:16
爲什麼做它作爲一個副本+刪除時,你可以在一個單一的命令?看到我的答案如何。 – 2012-03-22 13:30:20
@Sirwani - 是的,「TODO」是你的SQL(我假設你已經擁有)來執行復制和刪除。由於您沒有發佈Orders或OrdersXML的架構,因此我沒有嘗試將SQL用於複製和刪除。 – Ryan 2012-03-22 16:20:21