我有一个使用游标的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
感谢
nat
if exists(
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
)
...
这里是如何使用@@Cursor_Rows
的示例
DECLARE TestCursor CURSOR STATIC FOR
SELECT <snip>
OPEN TestCursor
IF @@Cursor_Rows > 0 BEGIN
FETCH NEXT FROM TestCursor INTO @compid, @logid, @category
WHILE @@FETCH_STATUS = 0 BEGIN
<snip>
END
CLOSE TestCursor
DEALLOCATE TestCursor
请注意,您需要声明光标STATIC
(或KEYSET
)