Programing

SQL Server가 '잘못된 열 이름'을보고하지만 열이 있고 쿼리가 Management Studio를 통해 작동합니다.

lottogame 2020. 8. 15. 09:44
반응형

SQL Server가 '잘못된 열 이름'을보고하지만 열이 있고 쿼리가 Management Studio를 통해 작동합니다.


나는 약간의 교착 상태에 빠졌습니다. 일부 C#코드에 의해 생성 된 쿼리가 있습니다. 쿼리 Microsoft SQL Server Management Studio는 동일한 데이터베이스에 대해 실행될 때 잘 작동 합니다.

그러나 내 코드가 동일한 쿼리를 실행하려고하면 잘못된 열에 대해 동일한 오류가 발생하고 예외가 발생합니다. 이 열을 참조하는 모든 쿼리가 실패합니다.

문제의 열이 최근 데이터베이스에 추가되었습니다. 라는 날짜 열 Incident_Begin_Time_ts입니다.

실패한 예는 다음과 같습니다.

select * from PerfDiag 
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';

같은 다른 쿼리 Select MAX(Incident_Being_Time_ts);도 열이 누락되었다고 생각하기 때문에 코드에서 실행할 때 실패합니다.

어떤 아이디어?


이름이 같은 테이블이 두 개있는 것 같습니다. 하나는 스키마 'dbo'( dbo.PerfDiag)가 소유하고 다른 하나는 SQL Server에 연결하는 데 사용되는 계정의 기본 스키마 (예 :) 가 소유합니다 userid.PerfDiag.

스키마 객체 (예 : 테이블)에 대한 규정되지 않은 참조 (스키마 이름으로 규정되지 않은 참조)가있는 경우 객체 참조를 확인해야합니다. 이름 확인은 지정된 이름을 가진 적절한 유형 (테이블)의 개체를 다음 순서로 검색하여 발생합니다. 이름은 첫 번째 일치로 확인됩니다.

  • 사용자의 기본 스키마 아래.
  • 스키마 'dbo'에서.

규정되지 않은 참조는 위 순서에서 첫 번째 일치 항목에 바인딩됩니다.

일반적으로 권장되는 방법 으로 성능상의 이유로 항상 스키마 개체에 대한 참조를 한정 해야합니다 .

  • 정규화되지 않은 참조는 저장 프로 시저 또는 쿼리를 실행하는 자격 증명에 따라 참조가 바인딩 된 스키마가 변경 될 수 있으므로 저장 프로 시저 또는 쿼리에 대한 캐시 된 실행 계획을 무효화 할 수 있습니다. 이로 인해 쿼리 / 저장 프로 시저의 재 컴파일이 발생하여 성능이 저하됩니다. 재 컴파일은 컴파일 잠금을 해제하여 다른 사용자가 필요한 리소스에 액세스하는 것을 차단합니다.

  • 이름 확인은 'dbo'가 소유 한 개체의 가능한 버전을 확인하기 위해 두 개의 프로브를 만들어야하므로 쿼리 실행 속도가 느려집니다. 이것은 일반적인 경우입니다. 단일 프로브가 이름을 확인하는 유일한 경우는 현재 사용자가 지정된 이름 및 유형의 개체를 소유 한 경우입니다.

[추가 참고 사항 수정]

다른 가능성은 다음과 같습니다 (특정 순서 없음).

  • 자신이 생각하는 데이터베이스에 연결되어 있지 않습니다.
  • 자신이 생각하는 SQL Server 인스턴스에 연결되어 있지 않습니다.

연결 문자열을 다시 확인하고 SQL Server 인스턴스 이름과 데이터베이스 이름을 명시 적으로 지정했는지 확인합니다.


그냥 눌러 Ctrl+ Shift+ R볼 ...

SQL Server Management Studio에서 Ctrl + Shift + R은 로컬 캐시를 새로 고칩니다.


테이블을 삭제 / 변경하기 전에 트랜잭션 및 SQL 문 내에서 이것을 실행하는 경우이 메시지를받을 수도 있습니다.


열과 이름이 같은 변수를 사용하는 경우 '@'변수 마커를 잊어 버린 것일 수 있습니다. INSERT 문에서는 열로 감지됩니다.


똑같은 문제가있었습니다. 동일한 코드의 다른 부분에서 추가로 사용되는 임시 테이블의 일부 별칭 열 이름을 변경했습니다. 어떤 이유로 SQL Server Management Studio에서 캡처되지 않았으며 잘못된 열 이름에 대해 불평했습니다.

내가 간단히 한 것은 새 쿼리를 만들고 이전 쿼리의 SQL 코드를이 새 쿼리에 복사하여 붙여 넣은 다음 다시 실행하는 것입니다. 이것은 환경을 올바르게 새로 고치는 것처럼 보였습니다.


결국 Microsoft SQL Server Management Studio를 종료하고 다시 시작했습니다. 그리고 그것은 나를 위해 그것을 고쳤습니다. 그러나 다른 경우에는 새 쿼리 창을 시작하는 것으로 충분했습니다.


제 경우에는 Microsoft SQL Sever Management Studio를 다시 시작하고 이것은 저에게 잘 작동합니다.


제 경우에는 여러 SQL 문을 쿼리 할 때 잘못된 ResultSet에서 값을 가져 오려고했습니다.


제 경우에는 문제가 이상한 캐싱 문제인 것 같습니다. 위의 솔루션이 작동하지 않았습니다.

코드가 제대로 작동하고 테이블 중 하나에 열을 추가했는데 '잘못된 열 이름'오류가 발생하고 위의 솔루션이 작동하지 않는 경우 다음을 시도하십시오. 먼저 수정 된 코드를 만들기위한 코드 섹션 만 실행합니다. 테이블 전체 코드를 실행하십시오.


이 답변이 Google에서 "잘못된 열 이름 sql"에 대한 상위 결과 였기 때문에 여기에이 답변이 표시되지 않았습니다. 제 경우에는 Entity Framework C # 코드의 .HasForeignKey 문에 잘못된 ID를 사용했기 때문에 잘못된 열 이름, Id1이 발생했습니다. .HasOne () 객체의 ID와 일치하도록 변경하면 오류가 사라졌습니다.


I've gotten this error when running a scalar function using a table value, but the Select statement in my scalar function RETURN clause was missing the "FROM table" portion. :facepalms:

참고URL : https://stackoverflow.com/questions/7260487/sql-server-reports-invalid-column-name-but-the-column-is-present-and-the-quer

반응형