트레일 링 세트가 SQL에 오류를 일관성있게 던지는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1862008

  •  13-09-2019
  •  | 
  •  

문제

웹 애플리케이션 중 하나의 오류를보고 있으며 데이터베이스에서 레코드를 업데이트 할 책임이있는 저장 프로 시저를 호출했습니다.

이 저장된 절차는 문제없이 몇 주 동안 작동했습니다. 그런 다음 어느 날 그것은 오류를 던지기 시작했고, 디버깅하는 동안 우리는 저장된 절차 내부에있는 원인을 발견했습니다.

기본적으로 이와 같은 진술이있었습니다

Begin
  // Do Stuff

  Set
End

그래서 SET 실제로 아무것도 설정하지 마십시오. 어떤 이유로 이것은 서버에서 완벽하게 잘 실행되며, 오늘 초 불만을 시작하기로 결정한 클라이언트 서버에서 잘 실행되었습니다. (잘못된 구문 오류)

이러한 갑작스런 행동 변화를 일으킬 수있는 SQL 서버 설정 유형이 있습니까?

설명 - SET 항상 절차에있었습니다. 그리고 실행 a SET 그 자체로 또는 저장된 절차에서 유일한 진술로서 실제로 저에게 효과적입니다. 이것이 문제입니다 그렇지 않아야합니다 일하다. 그렇다면 실패해야 할 때 작동하게하는 것이 있습니까?

도움이 되었습니까?

해결책

a SET 그렇게하더라도 일반적으로 컴파일에 실패합니다. SET 도달 할 수 없습니다 :

alter procedure dbo.testproc as
    begin
    return 1;
    set
    end

Incorrect syntax near the keyword 'SET'.

Alter가 실패하기 때문에 프로 시저가 데이터베이스에서 처음부터 어떻게 끝날 수 있는지 알 수 없습니다.

또는 SQL Server 2000의 호환 모드에서 실행 중일 수도 있습니다 (여전히 허용됩니다.) 호환성 MDOE를 SQL Server 2005 이상으로 변경하면 절차가 중단됩니다.

다른 팁

"세트"를 실행하면 그 자체로 오류가 발생합니다. 원래 라인에 도달하지 못하게 한 분기 코드 (ifs, returns, gotos 등)가있을 수 있다고 제안하려고했지만 ... 스탠드로 포함하는 저장된 절차를 만들 수는 없습니다. 혼자 진술.

프로 시저를 스크립트하고 다른 이름으로 재현하려고하면 생성 할 수 있습니까?

그 대본을 게시하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top