2010-06-09 4 views
1

보기에 색인을 만들려고하는데 실패하기 때문에 나는 그 별명을 사용하고 있습니다. 어떻게 또는 내가 이런 식으로 할 수 있는지. 아래는 단순화 된 시나리오입니다.색인보기 색인 생성 실패

CREATE VIEW v_contracts WITH SCHEMABINDING 
AS 
SELECT 
    t1.contractid as 'Contract.ContractID' 
    t2.name as 'Customer.Name' 
    FROM contract t1 
    JOIN customer t2 
    ON t1.contractid = t2.contractid 
GO 

CREATE UNIQUE CLUSTERED INDEX v_contracts_idx ON v_contracts(t1.contractid) 
GO 
--------------------------- 
Incorrect syntax near '.'. 

CREATE UNIQUE CLUSTERED INDEX v_contracts_idx ON v_contracts(contractid) 
GO 
--------------------------- 
Column name 'contractid' does not exist in the target table or view. 

CREATE UNIQUE CLUSTERED INDEX v_contracts_idx ON v_contracts(Contract.ContractID) 
GO 
--------------------------- 
Incorrect syntax near '.'. 

별칭이 지정된 열을 사용하여 색인 된보기를 만드는 방법을 알고 싶습니다.

답변

1

두 개의 열 사이에 쉼표은 어떻습니까?

SELECT 
    t1.contractid as 'Contract.ContractID' -- <=== comma missing here 
    t2.name as 'Customer.Name' 

그리고 아마 정말 내 별명으로 "Contract.ContractID"를 사용하지 것이다 ..... 점선 표기는 SQL 서버에서 특별한 의미 (database.schema.object)가 있습니다 - 그래서 난 아무것도 피할 것 이름

CREATE UNIQUE CLUSTERED INDEX v_contracts_idx 
ON v_contracts([Contract.ContractID]) 
GO 

또한 인덱싱 된 뷰가 5 정도 SET 옵션을 필요로 유효한 열 이름이 아니기 때문에 그 .....이 문제가 열 이름 주위

CREATE VIEW v_contracts WITH SCHEMABINDING 
AS 
    SELECT 
    t1.contractid as 'ContractID' , -- comma here at the end!! 
    t2.name as 'CustomerName' 
    FROM contract t1 
    JOIN customer t2 ON t1.contractid = t2.contractid 
GO 

CREATE UNIQUE CLUSTERED INDEX v_contracts_idx ON v_contracts(ContractID) 
GO 
+0

예, 샘플에서 쉼표가 누락되었지만 실제 코드는 누락되었습니다. 불행히도 나는 우리의 사용자 지정 ORM이 필드를 개체 속성에 매핑하고 관계를 만드는 방법 인 점 표기법 b/c를 사용하여 열 이름의 별칭을 지정해야합니다. – aBetterGamer

0

왜 원래의 열을 다시 별칭으로 바꾸려면 테이블의 별칭을 지정 하시겠습니까 ?? 그냥 해.

CREATE VIEW v_contracts WITH SCHEMABINDING 
AS 
SELECT 
    Contract.ContractID, 
    Customer.Name 
    FROM contract 
    JOIN customer 
    ON contract.contractid = customer.contractid 
GO 

그리고 예, 쉼표가 누락되었습니다.

+0

내가 두 테이블을 사용하고 있다는 것이 뻔뻔스럽게 명백하게하려고 노력했습니다. – aBetterGamer