1

単純なselectステートメントを含むストアドプロシージャがあります。

        ALTER PROCEDURE [dbo].[TransferAuditRecords] 
As
SET NOCOUNT ON
SET XACT_ABORT ON

Declare @UserCode As varchar(50)

DECLARE AuditCursor CURSOR FOR
        select top 1 UserCode from [AuditDatabaseServer].AuditDatabase.dbo.dbaudit where auditdate >= '2012-09-04'  
        Open AuditCursor
        FETCH NEXT FROM AuditCursor INTO @UserCode
        WHILE @@FETCH_STATUS = 0  
            BEGIN
                Print @Usercode
                FETCH NEXT FROM AuditCursor INTO @UserCode
            END

    Close AuditCursor 
    Deallocate AuditCursor 

数行のコードが欠落していますが、質問とは無関係であるため除外しました。

ストアドプロシージャを使用せずにSQLステートメントを実行すると、つまりSQL Studio Manager 2005で実行すると、ストアドプロシージャを実行した場合とは異なる出力が得られます。つまり、返される最上位の参照が異なります。なぜ出力が違うのですか?

これは、SQL Serverがコンパイル済みコードに異なる実行プランを使用しているため、SQLStudioManagerで実行されているコードとの比較であると確信しています。でもチェックしたかった。

4

1 に答える 1

0

ORDER BY句を使用して、どの行が選択されているかを予測どおりに示します。

例:上位1つを選択...監査日で並べ替え

無関係::削除したコードの一部でカーソルを使用する必要がありますか?そうでなければ、もっと単純な「select top 1 @UserCode =UserCodefrom...」で十分だと思います。

于 2012-09-09T14:49:32.667 に答える