更新:我正在使用Sql Server 2008 R2。获取多行更新的最高ID
我要更新大量的行并避免不必要的锁定我将在每次更新大约1000行的匹配中执行此操作。
使用SET ROWCOUND
我可以限制更新到1000行,并使用WHERE ID > x
我可以设置它应该运行的批次。
但是为了这个工作,我需要知道刚刚处理的批次中的最高ID。
我可以让用户OUTPUT
返回所有受影响的ID并找到代码中最高的一个,但我希望能够返回最高的ID。
我想这
SELECT MAX(id)
FROM (
UPDATE mytable
SET maxvalue = (SELECT MAX(salesvalue) FROM sales WHERE cid = t.id GROUP BY cid)
OUTPUT inserted.id
FROM mytable t
WHERE au.userid > 0
) updates(id)
但它给我这个错误 A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement.
,但如果我尝试的结果插入表直接被有效
CREATE TABLE #temp(id int)
INSERT INTO #temp
SELECT MAX(id)
FROM (
UPDATE mytable
SET maxvalue = (SELECT MAX(salesvalue) FROM sales WHERE cid = t.id GROUP BY cid)
OUTPUT inserted.id
FROM mytable t
WHERE au.userid > 0
) updates(id)
drop table #temp
有对此的任何解决方法,任何人都可以解释为什么我可以将结果插入到表中,但不只是返回结果?
的Sql Server 2008 R2中似乎不喜欢TOP与更新,它会产生不正确的语法。 –
但解决方案工作:) –