Сбой создания индекса представления индекса - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь создать индекс для представления, и он продолжает терпеть неудачу, я почти уверен, что его / ее я использую псевдоним для столбца.Не уверен, как или если я могу сделать это таким образом.Ниже приведен упрощенный сценарий.

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

Кто-нибудь знает, как создать индексированное представление с использованием столбцов с псевдонимами, пожалуйста, дайте мне знать.

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

попробуйте использовать квадратные скобки вокруг имени столбца, потому что имя не является допустимым именем столбца

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

Также для индексированных представлений требуется 5 или около того опций SET, подробнее здесь: http://msdn.microsoft.com/en-us/library/ms191432.aspx

1 голос
/ 10 июня 2010

Как насчет запятой между двумя столбцами ???

  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 голосов
/ 10 июня 2010

Зачем вы используете псевдонимы для таблиц, если вы просто хотите переименовать столбцы обратно в исходный файл? Просто сделай

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

И да, вы пропустили запятую.

...