0

これは、コードを与えられた別の質問に似た学校の質問です。

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)

where を sys.views.name =... に設定し、ビューの作成が「最初に」実行されるように exec コマンドを設定する必要がありました。

4

2 に答える 2

1

ビューが存在するかどうかを確認する方法は複数あります。ただし、多くの場合、ビューが存在する場合は削除してから再作成する方法があります。

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

それから、あなたのcreate view発言には2つの欠陥があります。まず名前がない。2 つ目は、 が組み込まcreate viewれていることです。サブクエリのビューまたはステートメント全体のビューのどちらを作成するかを決定する必要があります(質問からは、どちらが正しいアプローチかはわかりません)。

于 2013-08-18T19:17:34.693 に答える