2013-08-18 6 views
0

Так Это школа вопрос похож на другой, я получил код:SQL сценарии Создание представления вместо производной таблицы

USE AP 

SELECT VendorName, FirstInvoiceDate, InvoiceTotal 
FROM Invoices JOIN 
    (SELECT VendorID, MIN(InvoiceDate) AS FirstInvoiceDate 
    FROM Invoices 
    GROUP BY VendorID) AS FirstInvoice 
    ON (Invoices.VendorID = FirstInvoice.VendorID AND 
     Invoices.InvoiceDate = FirstInvoice.FirstInvoiceDate) 
JOIN Vendors 
    ON Invoices.VendorID = Vendors.VendorID 
ORDER BY VendorName, FirstInvoiceDate 

мне нужно изменить, чтобы создать представление вместо производной таблицы я был думая что-то больше похоже на

IF NOT EXISTS (SELECT * FROM sys.views 
     Where name = ‘EarliestInvoiceandTotalVEW’) 


CREATE View AS 
Select VendorName, FirstInvoiceDate, InvoiceTotal 
From Invoices JOIN 
    (Create VIEW FirstInvoice AS 
    SELECT VendorID, MIN(InvoiceDate) AS FirstInvoiceDate 
    From Invoices 
    Group By VendorID) As FirstInvoice 
    ON (Invoices.VendorID = FirstInvoice.VendorID AND 
     Invoices.InvoiceDate = FirstInvoice.FirstInvoiceDate) 
JOIN Vendors 
    ON Invoices.VendorID = Vendors.VendorID 
ORDER BY VendorName, FirstInvoiceDate 

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

Спасибо за любой вклад!

Я извиняюсь о формате я взял его непосредственно из SQL Server и обычно форматируются хорошо ...

Это то, что я должен работать:

USE AP 
Declare @Create1 varchar(8000) 

IF EXISTS (SELECT * FROM sys.views Where sys.views.name = 'EarliestInvoiceandTotalVIEW') 
    drop view EarliestInvoiceandTotalVIEW; 

SET @CREATE1 = 'CREATE View EarliestInvoiceTotalVIEW AS 
Select VendorName, FirstInvoiceDate, InvoiceTotal 
From Invoices JOIN 
    (SELECT VendorID, MIN(InvoiceDate) AS FirstInvoiceDate 
    FROM Invoices 
    GROUP BY VendorID) AS FirstInvoice 
    ON (Invoices.VendorID = FirstInvoice.VendorID AND 
     Invoices.InvoiceDate = FirstInvoice.FirstInvoiceDate) 
JOIN Vendors 
    ON Invoices.VendorID = Vendors.VendorID' 

Exec (@CREATE1) 

Я должен был установить где sys.views.name = ..., а также установить команду exec, чтобы представление представления запускалось «первым».

+0

В чем ваш вопрос? – Andomar

+0

Вторая часть содержит ошибки для меня: Msg 102, Level 15, State 1, Line 4 Неверный синтаксис рядом с '' '. Msg 111, уровень 15, состояние 1, строка 6 «CREATE VIEW» должен быть первым оператором в пакете запросов. Msg 156, Level 15, State 1, Line 9 Неверный синтаксис рядом с ключевым словом «Создать». Msg 111, уровень 15, состояние 1, строка 9 «CREATE VIEW» должен быть первым оператором в пакете запросов. Msg 102, Level 15, State 1, Line 12 Неверный синтаксис рядом с ')'. Хотя я так долго работал над этим, я мог делать что-то неправильно. Это правильно или где я возиться? –

+0

Вы не указали имя представления в 'create', это должно быть' create view [EarliestInvoiceandTotalVEW] как -etc.' –

ответ

1

В ответ на ваш комментарий, обязательно окружать ваше определение вида с GO заявления:

if exists (select * from sys.views where name = 'ThreeDigitsOfPi') 
    drop view dbo.ThreeDigitsOfPi 
GO 
create view dbo.ThreeDigitsOfPi 
as 
select 3.14 as PI 
GO 

некоторых других точек:

  • Вы должны использовать одиночные кавычки ' вместо стиль цитирует
  • Ваше имя должно быть на английском языке (create view NameOfView as ...)
  • Определение view не может следовать за оператором if, если только представление не создано в динамическом SQL. Например: if not exists (...) exec('create view ...')
1

Существует несколько способов проверить, существует ли представление. Тем не менее, часто этот подход, чтобы удалить вид, если он существует, а затем воссоздать его:

IF EXISTS (SELECT * FROM sys.views Where name = ‘EarliestInvoiceandTotalVEW’) 
    drop view EarliestInvoiceandTotalVEW; 

Затем ваши create view утверждения имеет два недостатка. Сначала ему не хватает имени. Во-вторых, в нем есть встроенный create view. Вы должны решить, какой из них вы хотите создать - представление для подзапроса или представление для всего заявления (мне непонятно, из вопроса, который является правильным подходом).

+0

Спасибо, что помогли мне в правильном направлении. В конечном итоге это то, что я получил, чтобы работать (не получил заказ на работу (еще?)) Я отредактирую свое сообщение с тем, что я получил на работу. –

+0

@ DanielErb. , , '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –