【发布时间】:2010-09-17 10:51:21
【问题描述】:
我有一个使用游标的 SQL Server sp:
DECLARE TestCursor CURSOR FOR
SELECT
tblHSOutcomes.strOutcomeName,
tblHSData.fkHSTest
FROM
tblHSData
INNER JOIN tblHSOutcomes ON tblHSData.fkOutcome = tblHSOutcomes.uidOutcome
INNER JOIN tblHSTests ON tblHSData.fkHSTest = tblHSTests.uidTest
WHERE
tblHSData.fkEpisode = @uidHSEpisodes
OPEN TestCursor
FETCH NEXT FROM TestCursor
INTO @Result, @TestID
WHILE @@FETCH_STATUS = 0
BEGIN
...etc
它工作正常,但是如果能够在继续处理之前检查游标查询是否有任何记录,那就太好了。
如果有一个@@ var 可以用来检查这个?
我知道有 @@RowCount - 但这只有当前处理的行数 - 所以不是很有帮助
理想情况下,我希望能够做这样的事情:
if @@cursorQueryHasRecords
BEGIN
WHILE @@FETCH_STATUS = 0
BEGIN
...etc
谢谢
【问题讨论】:
-
为什么不能使用@@FETCH_STATUS 本身?
-
你真的需要一个游标吗,它们通常是最糟糕的选择。 wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them
标签: sql-server tsql count rows database-cursor