SQL Server 2008 R2 (버전 10.50.4000.0) 사용 :이것은 SQL Parser 버그입니까? 아니면 내 오해?
두 개의 테이블이 있습니다. 한 테이블에서 ID가 다른 테이블에있는 데이터를 삭제하고 싶습니다. 충분히 간단합니다. 그러나 입력 실수로 인해 파서 버그 인 것으로 나타났습니다. 아래의 스크립트에서
는 [SomeID] 표 1의 열하지만 실제로는 표 2에 존재하지 않는Delete from Table1 where [SomeID] in (Select [SomeID] from Table2)
당신이 하위 쿼리 "Select [SomeID] from Table2
를 실행하면 열이되지 않는다는 적절한 오류 메시지 있다. 당신이 비록 전체 삭제 쿼리를 실행하면
, 그것은 오류없이 실행하고, 표 1에서 모든
파서가 열이 나는 당신이 사용할 수있는 알고 표 2에 존재하지 않았다 잡은 것을 보인다 삭제 열 밖에서 하위 쿼리에서 파서는 내가 table1에서 열을 사용한다는 것을 전제로한다는 것을 알고 있었지만 table2의 열을 지정하지 않았기 때문에 파서는 제 의견으로는 충분히 똑똑해야했습니다. 뭔가 잘못되었다는 것을 알았습니다. 다행히도 이러한 일이 발생했을 때 우리는 테스트 환경에있었습니다. :)
덕분에, 토니
나는 당신이 무엇을 발견했는지 확인할 수 있습니다. 파서는이 경우에 당신이 원하는 것을 파악할만큼 똑똑하지 않습니다. 외부 쿼리에서 테이블의 필드를 사용하려는 것으로 추측되었습니다. –
BTW, 배워야 할 교훈은 테이블 이름이나 테이블 별칭으로 필드 이름을 항상 한정해야한다는 것입니다. –
@Mikael Eriksson : 동의 함. –