我已经简化为下面的代码的存储过程:覆盖行数量的影响返回使用游标内
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' –