[SQL] SQL 서버 2008 관리 스튜디오 내 쿼리의 구문을 확인하지
SQLSQL 서버 2008 관리 스튜디오 내 쿼리의 구문을 확인하지
항상 그렇듯이,이 놀랍게도을위한 합리적인 설명 될 것이지만 그때까지 ....
나는이 쿼리를
delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)
잘 (나중에 내가 전체 사진 테이블이 비어있는 것을 발견)하는이 실행
하지만 이상한 것은 : HotelSupplier에는 필드 hs_id 없다, 그것은 hs_key라고!
내가 마지막 부분을 실행할 때 이렇게
select hs_id from HotelSupplier where id = 142
별도 (마우스로 쿼리의 일부를 선택하고 F5를 명중), 오류가 발생합니다,하지만 난 절에 그것을 사용할 때, 그것은하지 않습니다!
이 정상적인 동작이 있을까?
해결법
-
==============================
1.그것은 외부 쿼리에서 hs_id의 값을하고있다.
그것은 외부 쿼리에서 hs_id의 값을하고있다.
그것의 선택 목록에서 선택한 테이블의 모든 열을 투영하지 않는 쿼리를 완벽하게 유효합니다.
예를 들면
select 10 from HotelSupplier where id = 142
where 절과 모든 행에 대한 값 10 일치로 여러 행으로하여 결과 세트를 반환합니다.
규정되지 않은 열 참조는 상관 서브 쿼리로 처리됩니다,이 때문에 가장 가까운 범위 바깥에서 해결됩니다.
hs_id 긴 HotelSupplier는 적어도 하나 개의 행이뿐만 null가 아닌 경우이 쿼리의 결과는 사진에서 모든 행을 삭제하는 것입니다 경우 ID = 142 (적어도 하나의 행 서브 쿼리 반환 정도)
이 효과가 무엇인지 고려하는 경우는 조금 더 명확 수 있습니다
delete from Photo where Photo.hs_id in (select Photo.hs_id)
이에 코스 동등하다
delete from Photo where Photo.hs_id = Photo.hs_id
그런데이 멀리 떨어져 개인적으로 잘못 볼 연결 Microsoft에보고하는 가장 일반적인 "버그"입니다. ERLAND Sommarskog는 SET STRICT_CHECKS ON에 대한 자신의 위시리스트에 포함되어 있습니다
-
==============================
2.이 테이블 간의 일관성있는 열 이름을 유지하는 강력한 인자이다. @Martin가 말한대로 내부 쿼리에 일치가 없을 때, SQL 구문은, 열 이름이 외부 쿼리에서 해결 될 수 있습니다. 이 상관 관계 서브 쿼리를 작성 보탬이지만, (여기로) 때때로 당신을 여행 할 수 있습니다
이 테이블 간의 일관성있는 열 이름을 유지하는 강력한 인자이다. @Martin가 말한대로 내부 쿼리에 일치가 없을 때, SQL 구문은, 열 이름이 외부 쿼리에서 해결 될 수 있습니다. 이 상관 관계 서브 쿼리를 작성 보탬이지만, (여기로) 때때로 당신을 여행 할 수 있습니다
from https://stackoverflow.com/questions/4594733/sql-server-2008-management-studio-not-checking-the-syntax-of-my-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 조인 : 일대 다 관계의 마지막 기록을 선택 (0) | 2020.03.12 |
---|---|
[SQL] 어떻게 SQL Server의 특정 테이블을 참조하는 모든 외래 키를 나열 할 수 있습니다? (0) | 2020.03.12 |
[SQL] 날짜를 삽입하는 동안 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환 실패 (0) | 2020.03.12 |
[SQL] 단순히 PostgreSQL의 테이블 이름을 사용할 수 없습니다 ( "관계가 존재하지 않습니다") (7) | 2020.03.12 |
[SQL] MySQL의 큰 테이블에서 임의의 행의 빠른 선택 (0) | 2020.03.12 |