更新:我正在使用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與更新,它會產生不正確的語法。 –
但解決方案工作:) –