CREATE VIEW im SQL-Server Verwendung von UNION ALL
Bitte betrachten Sie das folgende Beispiel:
CREATE VIEW VW_YearlySales
AS
SELECT 2011 AS YearNo, ProductID, SUM(Amount) FROM InvoiceTable2011
UNION ALL
SELECT 2012 AS YearNo, ProductID, SUM(Amount) FROM InvoiceTable2012
UNION ALL
SELECT 2013 AS YearNo, ProductID, SUM(Amount) FROM InvoiceTable2013
GO
Den InvoiceTable2013
existiert nicht wirklich und ich will nicht, erstellen Sie es jetzt, es wird automatisch erstellt, wenn die Aufzeichnung der ersten Rechnung für das Jahr 2013.
Kann mir jemand helfen, wie eine Bedingung angeben, überprüfen Sie die Existenz der Tabelle, bevor Sie den UNION ALL
?
Vielen Dank für Eure Hilfe.
- Konnte Sie klar: "Die Tabelle existiert, und ich will nicht, um es zu schaffen" => du meintest nicht vorhanden, richtig?
- Ich erkenne, dass du wahrscheinlich nicht ändern können, aber es wäre effizienter, eine einzige Tabelle. Sie haben wahrscheinlich eine Rechnungsstellung gibt, die Sie Abfragen können.
- Vielleicht ist der Prozess, der automatisch erstellt die neue Tabelle sollte die Verantwortung für die Aktualisierung der view-definition als gut. Ich denke, sowas ist implementiert in einem Projekt arbeitete ich mit, obwohl ich konnte nicht geben Sie details im moment.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie andere schon richtig gesagt haben, können Sie nicht erreichen dies mit einem Blick, weil die select-Anweisung hat zum verweisen auf eine Reihe konkreter Tabellen - und wenn einer von Ihnen nicht vorhanden ist, wird die Abfrage nicht ausgeführt werden.
Es scheint mir, wie Ihr problem ist fundamentaler. Klar sollte es konzeptionell genau eine
InvoiceTable
mit Zeilen für verschiedene Termine. Die Trennung in verschiedene logische Tabellen Jahr ist vermutlich etwas, das getan worden ist, für die Optimierung (es sei denn, die Spalten sind anders, was ich sehr stark bezweifle).In diesem Fall, partitionieren scheint, wie die Art und Weise dieses problem zu beheben (die Partitionierung großer Tabellen für Jahr/Quartal/Monat ist das Paradebeispiel). Damit würden Sie eine single
InvoiceTable
logisch, noch anzugeben, dass der SQL-Server sollte die Daten speichern, hinter den kulissen, als ob es waren verschiedene Tabellen aufgeteilt nach Jahr. Sie erhalten das beste aus beiden Welten - eine genaue Modell-und hoher Leistung - und das macht Ihre view-definition einfach.Nein, meines Wissens nach nicht möglich in anzeigen, verwenden Sie die Gespeicherte Prozedur. In der Gespeicherten Prozedur können Sie überprüfen, Tisch-Existenz & basierend auf der Existenz dieser Tabelle können Sie ändern Sie Ihre SQL.
EDIT:
Sieht aus wie Sie wollen, um eine Tabelle für jedes Jahr und Sie wollen, um sicherzustellen, dass Sie haben die Abfrage für die SP ohne änderung des SP. Dies ist ein wenig riskant , Sie zu pflegen haben die Namenskonventionen, die ganze Zeit. In diesem Fall, was Sie tun müssen, ist die Abfrage der informationschema Tabellen für table_name like 'InvoiceTable%'. Holen Sie sich die Datensätze in einer Tabelle und dann in einer Schleife durch die Datensätze der Befestigung der festen SQL. Und dann führen Sie die dynamische sql wie sein getan hier http://www.vishalseth.com/post/2008/07/10/Dynamic-SQL-sp_executesql.aspx