我有兩個具有相同列定義的表。我需要從一個表格移動(不復制)一行到另一個表格。在我退出並使用INSERT INTO/DELETE(在事務中)之前,有沒有更智能的方法?將行從一個表移動到另一個表?
SQL Server 2005中
我有兩個具有相同列定義的表。我需要從一個表格移動(不復制)一行到另一個表格。在我退出並使用INSERT INTO/DELETE(在事務中)之前,有沒有更智能的方法?將行從一個表移動到另一個表?
SQL Server 2005中
爲SQL Server 2005中刪除複製和起來,嘗試OUTPUT Clause (Transact-SQL)條款:
DELETE OldTable
OUTPUT DELETED.col1, DELETED.col2...
INTO NewTable
WHERE ID=...
工作例如:
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)
有沒有這樣的事情在SQL移動操作。 你必須先插入從表1至表2 然後從表1
OP是使用SQL Server 2005,所以[OUTPUT子句(Transact-SQL)](http://msdn.microsoft.com/en-us/library /ms177564.aspx)可以在單個命令中執行此操作,請參閱我的答案... – 2010-05-13 19:24:11
不,你幾乎套牢插入和刪除包裹交易
OP正在使用SQL Server 2005,所以[OUTPUT子句(Transact-SQL)](http://msdn.microsoft.com/zh-cn/ -us/library/ms177564.aspx)可以在單個命令中完成,請參閱我的答案... – 2010-05-13 19:22:41
您可以嘗試插入農行(A,B,C) 選擇(A,B,C)從高清
做的上方,從而將插入列A,B,C(防守)到abc的a,b,c列中。插入後運行刪除表,刪除表或截斷任何您的標準。
樣品是:
Begin
Begin try
Begin Transaction
Insert into emp(name, department, salary)
Select empName,empDepartment,empSal from employees
Where employees.empID = 211
Truncate table employees
End Transaction
End try
Begin Catch
if @@Error > 0
Rollback Transaction
End Catch
End
INSERT dbo.newtable(
name,
department,
Salary
) SELECT
name,
FirstName,
Lastname
FROM (
DELETE dbo.oldtable
OUTPUT
DELETED.name,
DELETED.department,
DELETED.Salary
WHERE ID IN (1001, 1003, 1005)
) AS RowsToMove
SELECT * FROM dbo.newtable
SELECT * FROM dbo.oldtable
@KM:+1。我沒有意識到這一點。你會推薦使用'INSERT'和'DELETE'這個方法嗎? – 2010-05-13 19:18:22
我會在每次使用INSERT和DELETE時使用它,SQL Server可能會更好地對它進行優化,並且它可以保證INSERT和DELETE只有相同的行,不多也不少。 – 2010-05-13 19:20:24
這是一個陳述,所以......沒有必要的交易,我猜? – lance 2010-05-13 19:22:04