2013-03-05 4 views
1

, 나는이보기 생성 : 그것은 확인했다잘못된 개체 이름은 내가 그렇게하는 대신 때문에 일부 배포 제한으로 내 프로젝트에 synomyms을 사용할 수 없습니다

CREATE VIEW [dbo].[User] AS SELECT * FROM [PersonalData].[dbo].[User] 
GO 

을하지만 지금은 다음과 같이 수정해야합니다

LEFT OUTER JOIN 라인

Ambiguous column name 'Id' 

:

ALTER VIEW [dbo].[User] AS 
    SELECT [Id], 
    t.[Name] AS [Title], 
    [FirstName], 
    [LastName], 
    [JobTitle], 
    [Department], 
    [EmailAddress], 
    [PhoneNumber], 
    [PhoneExtension], 
    [MobilePhoneNumber], 
    [CreatedDate], 
    [ModifiedDate], 
    [Uid], 
    [Active] 
    FROM [PersonalData].[dbo].[User] AS u 
    LEFT OUTER JOIN [PersonalData].[dbo].[Titles] AS t ON u.TitleId = t.Id 
GO 

는 현재는 실패합니다.

그러나 Microsoft SQL 관리 Studio는 오류 [PersonalData].[dbo].[Titles]을 강조 :

Invalid object name '[PersonalData].[dbo].[Titles] 

는 사실이 나던 그 테이블의 컬럼에 대한 인텔리 저를 제공합니다.

테이블 [PersonalData].[dbo].[Titles]이 있습니다. 사실, 오류없이 다음 쿼리 결과를 반환 : SQL에 대한

select * from [PersonalData].[dbo].[Titles] 

나의 지식은 충분히 깊이 아니지만이 Users 테이블을 찾지 만 나던 Titles을 찾을 이유는, 이것이 이유를 이해하지는.

조금 더 상황 :

  • 내가 만드는 오전보기는 PersonalData 데이터베이스에 있지만 Platform라는 다른 데이터베이스에 없습니다.
  • 컨텍스트를 확인했는데 OK입니다. Platform 데이터베이스에 뷰를 생성하고 있습니다.

왜 그런가?

+2

'SELECT u. [Id] AS [id]'를 사용할 수 없습니까? 보기를 만드는 것만으로도'Titles' 테이블을 찾을 수 있습니다. –

+0

@MattBusche 약간의 정교함을 추가하면이 질문에 대한 답변으로 게시해야한다고 생각합니다. –

+0

@MattBusche : 이것은 대답입니다 (부끄러움). 대답 해주세요, 받아 들일 것입니다. 감사합니다 – lontivero

답변

3

[id] 필드에 테이블 이름을 추가해야합니다. 그 필드가 양쪽 테이블에 있기 때문에 모호한 것으로 간주되는 이유입니다 (뷰는 어떤 테이블을 가져올 지 알지 못합니다).

SELECT u.[Id] AS [id] 
1

당신의 사용자 테이블과 제목 타베 모두 "ID"라는 이름의 열이 나타납니다

ALTER VIEW [dbo].[User] AS 
    SELECT u.[Id], 

보십시오. SELECT 열 목록에서 어떤 Id 열을 의미하는지 알 수 없다는 것을 알려줍니다.

2

IntelliSense를 문제가 주변이며, 때문에이 될 수 있습니다 : 그것은 두 테이블에 존재하기 때문에

  1. 이전 구문 오류가 (당신이는 뜻 Id하는 SQL 서버를 말할 필요) 또는
  2. 로컬 IntelliSense 캐시가 오래되었음을 나타냅니다. 당신은 (초 또는 분을 대기하고, 서버로의 네트워크 연결에 따라) Ctrl 키 + 시프트 + R을 발행 또는 Edit > IntelliSense > Refresh Local Cache를 사용하여이 문제를 해결할 수 있습니다.

    1. 가 열 Id 이름을하지 마십시오, 나는 두 가지 변경, 심각한 하나는 바로 가장 좋은 방법을 제안했다

    . 이름은 완전히 의미가 없습니다. UserID입니까? 스키마에 나타나면 어디서나 UserID이라고 부릅니다.

  3. 이름 충돌이있는 쿼리뿐만 아니라 의 모든 열이 올바르게 쿼리에 포함됩니다. 이렇게하면 쿼리를보다 쉽게 ​​이해할 수 있으며 열을 가져 오는 테이블을 수동으로 파악하지 않아도됩니다.