Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 插入“从更新中选择”_Sql Server 2005_Insert Select - Fatal编程技术网

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;