1

我有一个存储过程,其中包含一个简单的选择语句:

        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 对编译代码使用不同的执行计划,这与 SQL Studio Manager 中运行的代码进行了比较。我想检查一下。

4

1 回答 1

0

使用 ORDER BY 子句可预测地指示选择了哪一行。

例如选择前 1... 按审计日期排序

Unrelated:: 您删除的部分代码是否需要使用游标?我猜是这样,否则一个更简单的“选择前 1 个 @UserCode = UserCode from ...”就足够了。

于 2012-09-09T14:49:32.667 回答