안녕하세요 SQL SERVER 2008 R2 를 사용하고 있구요
프로젝트에서 stored procedure(이하 sp) 를 많이 사용합니다.
그런데 어제부터 sp를 작성할때 오류가 있어도 컴파일이 잘되는 겁니다.
예를 들면
create procedure dbo.test
AS
BEGIN
SELECT *
FROM zzz -- 실제로 zzz 은 존재하지 않는 테이블 입니다.
RETURN 0;
END
잘못작성된 sp 이므로 위의 create procedure 문은 에러가 나야 되는데
에러가 안나고 생성이 됩니다..
컴파일시에 에러가 나야 잘못된 부분을 찾아서 수정을 하는데
컴파일시에 에러를 못찾아내니 복잡한 sp의 경우 프로그램 수정이 어렵네요....
근데 분명한 것은 며칠전까지는 컴파일이 안되었습니다.
참고로 친구 회사에 물어봤더니 지금 거기도 그런 현상이 있다고 하네요...
Comment 3
-
폭주
2013.11.05 19:32
-
minsouk
2013.11.06 10:20
이것은 by design 이슈 입니다.
(
타 상용 데이터베이스는 이게 이렇게 동작하는데 SQL Server 는 다르게 동작한다.
이건 제품의 디자인 철학이 달라서 어떻게 말 하기 어렵습니다.에버랜자 자이로드랍을 120 cm 이하 어린이는 탈 수 없어 라고 삼송이 정했어요,
그런데 씨애틀 자이로드랍은 110 cm 기준으로 탈 수 있다라고 해외 규정을 들고와서
한국 에버랜자 자이로드랍 규정이 잘못 되었어....라고 말씀해도
110 cm 는 못 타요....."자" 들고 형님들이....이놈!!.......이러고 있어요 ^^
)
deferred name resolution and compilation 이라는 것을 참조 하시면 더 많은 정보를 얻을 수 있습니다.
sql server 는 없는 기존에 있던 테이블에 없는 컬럼을 조회하는 프로시저를 만들면 에러가 발생합니다.
그러나 아예 없는 테이블을 억세스 하는 프로시저를 만들면 에러가 나지 않고 정상적으로 만들어 집니다.
바로 윗 글에 한글 링크가 있네요~
이것이 나중에 호출되고 에러가 나는지를 보려면 sql server profiler 의 error and warnings 를 보시면 잘 나올것으로 보이구요
저는 xEvent 라는 것을 통해서 이런것이 있는지 운영중인 서버에서 주기적으로 검사 하기를 추천 드립니다.
xEvent 에 대해서는 sql server 운영과 튜닝 2편에서 자세히 기술 하도록 하겠습니다.
-
정석민
2013.12.02 19:57
프로젝트가 바빠서 이제서야 감사 댓글을 답니다.
SET FMTONLY ON 에 대해서 새롭게 배웠네요...
그리고 본문에 며칠전에 되었었다고 적었던 것은 제 기억의 오류입니다.
며칠전에도 안되었을 것입니다.
답변해주신 두분께 감사드립니다.
질문하신 없는 테이블개체에 대해서는 오류 발생 하지 않고 프로시저 생성이 됩니다.
온라인북 참고 하시면 되겠네요.
http://msdn.microsoft.com/ko-kr/library/ms190686.aspx
또한 프로시저의 테이블이 없는 경우 등을 테스트 해보시려면
FMTONLY 설정 ON 하고 쿼리 사용하시면 됩니다.
SET FMTONLY ON
EXEC 프로시저명
SET FMTONLY OFF
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=KO-KR&k=k(FMTONLY_TSQL);k(SQL11.SWB.TSQLRESULTS.F1);k(SQL11.SWB.TSQLQUERY.F1);k(MISCELLANEOUSFILESPROJECT);k(DevLang-TSQL)&rd=true