2012-07-03 3 views
0

동일한 인스턴스에 두 개의 데이터베이스 DB1DB2이 있다고 가정합니다. 테이블 tab2DB2에 있습니다.SQL Server에서 뷰의 기본 키를 만드는 방법은 무엇입니까?

CREATE UNIQUE CLUSTERED INDEX tab2_Key 
ON dbo. tab2 (id2) 

를이 다음과 같은 오류가 발생합니다 :

Msg 1939, Level 16, State 1, Line 1
Cannot create index on view 'Tab2' because the view is not schema bound.

CREATE VIEW [dbo].[Tab2] 
AS 
SELECT * 
FROM DB2.dbo.Tab2 

가 그럼 난 DB1tab2에 대한 키를 만들려고 : 나는 tab2 DB2에서 얻을 수 DB1에 뷰를 생성

이 문제를 어떻게 해결할 수 있습니까?

+0

아마도 지금하고있는 오류를 수정하는 방법을 알려줄 때, 다른 오류를 밟을 것입니다. 오류 (가까운 장래에 적어도 두 번 나타남). 목표를 달성하기로 결정한 대신 목표를 설명 할 수 있습니까? –

답변

4

글쎄, 인덱스가있는보기에 대한 몇 가지 규칙이 있습니다 (스키마 바인딩에 필요한 규칙의 일부 캐스케이드).

규칙 중 하나는보기에 SELECT *를 포함 할 수 없다는 것입니다. 또 다른 하나는 객체가 참조하는 객체와 동일한 데이터베이스에 존재해야한다는 것입니다.

규칙을 나열 할 수 있지만 herehere 문서에 나와 있습니다. 그리고 나는 당신에게 규칙이 어쨌든 많이 성취 할 것이라고 말하지 않을 것입니다.

이보기에서 클러스터 된 인덱스가 제공하는 이점을 정확히 설명 할 수 있습니까? 누군가가 색인 된보기가 "더 빠름"이라고 말했습니까? 이 경우에는 id2에 색인이있는 경우 특히 DB2.dbo.Tab2에 대한 검색어에 대해 어떤 작업이 수행되는지 알 수 없습니다. 이것은 여러 가지 방법으로 잘못 냄새가납니다 ...

+0

엔티티 프레임 워크가있는 DB1의 모드에서 DB2의 tab2에 대한 엔티티를 만들고 싶습니다. 왜냐하면 키가 없다면 EF는 모델에서 엔티티를 생성 할 수 없기 때문입니다. 필자는 모델링에만이 작업을 원하기 때문에 필자는 필자의 경우 성능에 신경 쓰지 않는다. 모든 데이터 조작은 SP에 의해 개별적으로 수행됩니다. – KentZhou

+1

죄송합니다. 다른 데이터베이스에서 인덱싱 된보기를 만들 수 없습니다. 이 방법을 다른 방법으로 해결해야합니다. 트리거를 사용하여 테이블 복사본을 최신 상태로 유지 (또는 첫 번째 위치의 올바른 테이블에서 EF를 가리 키기 만하면됩니까?). –

+0

감사합니다. 그것은 나쁜 소식이다. 나는이 사건에 대한 또 다른 해결책을 생각할 것이다. – KentZhou

관련 문제