2012-09-09 8 views
1

를 연결 I 간단한 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 Studio Manager 2005에서 저장 프로 시저없이 SQL 문을 실행하면 저장 프로 시저를 실행할 때와 다른 결과가 표시됩니다. 즉 반환되는 참조가 다른 경우입니다. 출력이 다른 이유는 무엇입니까?

SQL Server가 SQL Studio Manager에서 실행중인 코드와 비교하여 컴파일 된 코드에 대해 다른 실행 계획을 사용하기 때문에 그 이유가 확실합니다. 나는 그러나 확인하고 싶었다.

+1

코드를 추가하십시오! – Dezigo

+0

@Dezigo, 더 많은 코드를 추가했으며 다른 단락을 추가했습니다 (마지막 단락). – w0051977

+1

SQL 문에 'order by'가 포함되어 있지 않으므로 SQL Server는 임의의 순서로 결과를 자유롭게 반환합니다. – Andomar

답변

0

ORDER BY 절을 사용하면 어떤 행이 선택되어 있는지 예측 가능하게 나타낼 수 있습니다.

상위 1 개를 선택하십시오 ... 감사 순서로 주문하십시오.

관련없는 : 제거한 코드의 일부에 필요한 커서를 사용합니까? 나는 그렇게 생각한다. 그렇지 않으면 더 간단한 "select top 1 @UserCode = UserCode from ..."로 충분할 것이다.

+0

이 질문을 게시하기 전에 order by 절을 추가했으며 예상 한 결과가 정확했습니다. 저장 프로 시저에서 반환 값이 다른 이유를 알고 있습니까? 귀하의 질문에 대한 답변; 설명 된 동작을 이해하면 코드를 추가 할 계획이므로 커서가 필요합니다. – w0051977