我已經簡化爲下面的代碼的存儲過程:覆蓋行數量的影響返回使用遊標內
SET NOCOUNT ON
DECLARE @count INT
DECLARE @temp TABLE
INSERT INTO @temp
SELECT @count = count(*) FROM @temp
DECLARE [cursor] FOR SELECT id FROM @temp
OPEN [cursor] FETCH NEXT FROM [cursor] INTO @id WHILE @@fetch_status = 0
BEGIN
exec anoterStoredProc @id
FETCH NEXT FROM [cursor] INTO @id
END
CLOSE [cursor]
DEALLOCATE [cursor]
SET NOCOUNT OFF
RETURN @count
但ExecuteNonQuery()
仍然返回-1!
我可以使用select @count
和ExecuteScalar()
,但要理解爲什麼我的代碼不起作用。
似乎NOCOUNT OFF
不會重置服務器行爲,並且NOCOUNT ON
仍在原地。
所以無論ExecuteScalar()或方向=返回和讀者它的價值,沒有什麼已經被ExecuteNonQuery()返回,right – abatishchev
@abatishchev沒有*返回* ExecuteNonQuery - 然而,任何out/ref/return -value參數將在原地更新,因此在調用之後,您可以從該參數獲得'.Value' –