Sql server 2005 插入“从更新中选择”
我需要从表中选择一些要更新的值,然后立即更新它们。此外,我需要为每个更新的记录在表中插入一条新记录。要选择记录并进行更新,我使用的结构如下Sql server 2005 插入“从更新中选择”,sql-server-2005,insert-select,Sql Server 2005,Insert Select,我需要从表中选择一些要更新的值,然后立即更新它们。此外,我需要为每个更新的记录在表中插入一条新记录。要选择记录并进行更新,我使用的结构如下 UPDATE TableA SET SomeField = 1 OUTPUT RecordID FROM TableA WHERE RecordID IN ( SELECT TOP @Something RecordID FROM TableA ) 现在,对于insert部分,我想将UPDATE语句包装成insert-into-SE
UPDATE TableA SET SomeField = 1 OUTPUT RecordID FROM TableA WHERE RecordID IN
(
SELECT TOP @Something RecordID FROM TableA
)
现在,对于insert部分,我想将UPDATE
语句包装成insert-into-SELECT
,从而利用OUTPUT
子句。然而,当我这样做时,SQL会抱怨
INSERT INTO TableA SELECT ( RecordID , GETDATE() ) FROM
(
UPDATE TableA SET SomeField = 1 OUTPUT RecordID FROM TableA WHERE RecordID IN
(
SELECT TOP @Something RecordID FROM TableA
)
)
即使使用
OUTPUT
子句,我也不能在一条语句中完成所有操作吗?可以使用OUTPUT将更新的行从一个表插入到另一个表中:
但是,我无法使您使用的语法正常工作。
请看看这个
只是不确定-您要再次插入更新的行吗?当然,您可以尝试以下操作:
INSERT INTO TableA (RecordID, Value)
SELECT RecordID, GETDATE()
FROM OPENQUERY(
yourserver,
'UPDATE TableA
SET SomeField = 1
OUTPUT inserted.RecordID
WHERE RecordID IN (SELECT TOP (5) RecordID FROM TableA)'
)
DECLARE @tmpRecords TABLE (RecordID int);
UPDATE TableA
SET SomeField = 1
OUTPUT inserted.RecordID INTO @tmpRecords (RecordID)
WHERE RecordID IN (SELECT TOP (@Something) RecordID FROM TableA);
INSERT INTO TableA (RecordID, SomeDateColumn)
SELECT RecordID, GETDATE()
FROM @tmpRecords;
否,我想获取
RecordID
并插入一个包含不同数据的新行。您将在那里获得所有更新行的记录ID,您可以将其插入另一个表或其他列中。
DECLARE @tmpRecords TABLE (RecordID int);
UPDATE TableA
SET SomeField = 1
OUTPUT inserted.RecordID INTO @tmpRecords (RecordID)
WHERE RecordID IN (SELECT TOP (@Something) RecordID FROM TableA);
INSERT INTO TableA (RecordID, SomeDateColumn)
SELECT RecordID, GETDATE()
FROM @tmpRecords;