구문 오류로 인한 SQL Server Management Studio의 예기치 않은 동작
SSMS(SQL Server Management Studio)는 때때로 놀라운 동작을 나타냅니다. 즉, 쿼리의 구문 오류를 간과하는 것처럼 보일 수 있습니다. 이는 예상치 못한 결과를 초래할 수 있으며 SQL 개발 시 오류가 자주 발생하는 원인입니다. 사례 연구를 살펴보겠습니다.
예를 들어 다음 쿼리는 SSMS에서 오류를 생성하지 않고 실행됩니다.
<code class="language-sql">delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)</code>
그러나 hs_id
테이블에는 HotelSupplier
열이 존재하지 않습니다. 하위 쿼리를 독립적으로 실행하면 오류가 발생합니다.
이러한 불일치의 원인은 적합하지 않은 열 참조를 처리하는 데 있습니다. SQL에서는 자신이 속한 테이블을 명시적으로 지정하지 않고도 열을 참조할 수 있습니다. 이 경우 SSMS는 하위 쿼리의 hs_id
을 Photo
테이블(외부 쿼리)에 속하는 것으로 해석합니다.
따라서 쿼리는 다음과 같이 효과적으로 해석됩니다.
<code class="language-sql">delete from Photo where Photo.hs_id in (select Photo.hs_id from HotelSupplier where id = 142)</code>
다음과 같이 단순화됩니다.
<code class="language-sql">delete from Photo where Photo.hs_id = Photo.hs_id</code>
결과는? Photo
에 hs_id
.HotelSupplier
이 있는 행이 포함되어 있는지 여부에 관계없이 id = 142
이 NULL이 아닌
이 동작은 기술적으로 유효한 SQL이지만 잠재적으로 심각한 문제를 일으킬 수 있습니다. SSMS의 관대해 보이는 구문 검사는 오류를 가려 잘못된 데이터 조작으로 이어질 수 있습니다. 이러한 모호성을 피하고 SQL 쿼리의 정확성을 보장하려면 항상 열 참조를 명시적으로 한정하십시오.
위 내용은 SQL Server Management Studio가 쿼리의 구문 오류를 무시하는 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!