我不完全理解你在做什麼,但我認爲你的解決方案將涉及@@ ROWCOUNT;注意:
-- Sample data and proc...
----------------------------------------------------------------------
IF OBJECT_ID('tempdb..#data') IS NOT NULL DROP TABLE #data;
IF OBJECT_ID('dbo.MyProc') IS NOT NULL DROP PROC dbo.MyProc;
GO
CREATE TABLE #data
(
id int,
[Count] int
);
INSERT #data VALUES (1,5), (1,10), (2,3), (4,6);
GO
CREATE PROC dbo.MyProc(@id int)
AS
BEGIN
SELECT 'some value'
FROM #data
WHERE @id = id;
END;
GO
數據之前:
id Count
----------- -----------
1 5
1 10
2 3
4 6
使用例行@@ ROWCOUNT
DECLARE @someid int = 1; -- the value you're passing to your proc
EXEC dbo.MyProc 1;
DECLARE @rows int = @@ROWCOUNT; -- this is what you need.
UPDATE #data
SET [Count] = @rows
WHERE id = @someid;
數據後
id Count
----------- -----------
1 2
1 2
2 3
4 6
遊標是唯一的方法。如果你想提高性能,你需要打開存儲過程,並嘗試以基於集合的方式重寫它,然後你可以爲一堆ID進行重寫。您也可以將您的SP重寫爲標量值函數。那麼你可以在沒有光標的情況下做到這一點,但你仍然會遇到性能問題。如果你發佈你的SP代碼,我們可能會進一步幫助 –