6

私はカーソルを使用して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

ありがとう

4

3 に答える 3

12

カーソルを次のように宣言STATICできる場合は、組み込み関数を使用できます@@Cursor_Rows

カーソル オプション (静的/読み取り専用/動的)

@@Cursor_Rows

于 2010-09-17T11:11:05.450 に答える
4
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
)
...
于 2010-09-17T10:52:42.963 に答える