2010-06-09 144 views
1

我想在视图上创建一个索引,并且它保持失败,我很确定它的B/C我使用列的别名。不知道如何或如果我可以这样做。以下是一个简化的场景。索引视图索引创建失败

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 '.'. 

任何人都知道如何使用别名列创建索引视图,请让我知道。

回答

2

尝试使用括号因为这个名字是不是一个有效的列名

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

而且索引视图需要5个左右的SET选项打开,更多的信息在这里:http://msdn.microsoft.com/en-us/library/ms191432.aspx

+0

是的,这是它的!我无法相信我忘记了[]。我在各地使用它们。谢谢! – aBetterGamer 2010-06-10 15:50:00

1

逗号两列之间的关系如何?

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

,我可能不会真的用“Contract.ContractID”作为我的别名.....点号在SQL Server中具有特殊意义(database.schema.object) - 所以我会避免任何可能导致麻烦有.....周围的列名

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

是的,我的示例中缺少逗号,但不是实际的代码。不幸的是,我必须使用点符号b/c来替换列名,这就是我们的自定义ORM如何将字段映射到对象属性并创建关系。 – aBetterGamer 2010-06-10 15:43:46

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 2010-06-10 15:45:20