我有一个存储过程,其中包含一个简单的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中运行的代码进行比较。我想检查一下。
答案 0 :(得分:0)
使用ORDER BY子句可预测地指示选择了哪一行。
e.g。选择top 1 ...按审计日期排序
Unrelated ::是否使用了您删除的部分代码所需的游标?我想是这样,否则更简单的“从顶部选择@UserCode =来自...的UserCode”就足够了。