存储过程和链接服务器

时间:2012-09-09 13:03:18

标签: sql-server sql-server-2005 stored-procedures

我有一个存储过程,其中包含一个简单的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对编译代码使用不同的执行计划是与在SQL Studio Manager中运行的代码进行比较。我想检查一下。

1 个答案:

答案 0 :(得分:0)

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

e.g。选择top 1 ...按审计日期排序

Unrelated ::是否使用了您删除的部分代码所需的游标?我想是这样,否则更简单的“从顶部选择@UserCode =来自...的UserCode”就足够了。