Wiederverwendung eine table-variable?
Ich bin mit einer Liste von komplexen Abfrage auf eine Datenbank, die für bestimmte datetime Zeitraum (D. H. 05/01/2012 zu 05/31/2012). Dann brauche ich die selben Abfragen für 06/01/2012 zu 06/30/2012. dann kommen die Ergebnisse für den Bericht Zweck.
in den Abfragen verwendet habe ich mehrere Tabellen von Variablen zu halten, werden die temporären Daten. Weil die Datenbank zu groß ist, ist die Tabelle " variable Größe ist groß auch. Gibt es eine Möglichkeit, die ich wiederverwenden kann diese Tabelle Variablen?
DROP, Truncate wird nicht funktionieren. Muss ich alle Daten löschen aus @table? Wenn dem so ist, wird es langsam sein? Muss ich TUN, batch löschen für das @ - Tabelle, da hat es viele Daten?
BTW, ich haben, um alle Abfragen in eine SP-Datei kann nicht rufen Sie die Funktion oder andere SP wegen der Art, wie das system entwickelt wurde.
Dank
=============================
gibt es keine Schleife, in der Fragen. es funktioniert wie:
wählen ..... wählen Sie ..... update ..... join ......
tun, einen Satz von Abfragen für Datums-05/01/2012 zu 05/31/2012. dann müssen Sie den gleichen Satz von Abfragen für 06/01/2012 zu 06/30/2012.
in den queries, es sind viele logische im inneren, so wir können nicht kombinieren diese 2 in einem Satz von Abfragen. wegen system entwickelt, können wir nicht rufen Sie die Funktion oder SP für die Abfrage. zu tun haben, der 1. Satz-Abfrage, dann die 2. Abfrage in der Reihenfolge.
das problem ist es gibt zu viele Daten, die @Tisch ist zu groß. wenn wir wiederverwenden können @Tabelle, es wird das problem lösen.
Dank
===============================
ja, jetzt, gleiche codes, wiederholen Sie zweimal für 2 unterschiedliche datetime-Intervall. jedoch, in den code, es hat einige logische innen, verschiedene Prozess auf der Grundlage der Differenz zwischen datetime. Sorry, ich kann nicht nach dem tatsächlichen code. Aber, der Prozess ist wie ein SP mit verschiedenen datetime Zeit als Parameter.
Aber ich kann nicht mit SP/Funktion in diesem Fall, so müssen hard-code der gleiche code zweimal. im Idealfall benötigen, verwenden Sie verschiedene @ - Tabelle für jedes mal, wenn ich wiederholen Sie den code (jetzt muss ich wiederholen 3 mal), aber wegen der Größe der Daten, @Tabelle ist zu groß, wenn ich 3mal wiederholen (benötigt mehrere @ - Tabelle in der jeder zu tun, der logische Teil).
vielleicht hatte ich besser eine temporäre Tabelle? so kann ich es ablegen, wenn Sie beginnen, eine neue 'wiederholen'?
Dank
- Vielleicht könnten Sie zeigen Sie Ihren code. Die Wiederverwendung eine table-variable impliziert eine Schleife, die ist wahrscheinlich nicht nötig. Und sogar mit einer Schleife eine table-variable kann nicht notwendig sein. Scheint es kann viele Schichten diese Zwiebel. Die mehr peeling Sie für uns tun, desto besser sind Ihre end-Lösung werden.
- Ich verstehe nicht die Logik, dass Sie es gebucht.
select...select...update...join
- was bedeutet das? Wie gehen Sie von Mai bis Juni? Wie funktioniert Ihr code kennen, um die Ausführung von berichten für die zwei Monate? Sie haben zwei fast identische Abfragen hart-codiert mit diesen Daten? - Ich denke, Sie versuchen-zu-micro-optimieren hier. Leider aufgrund der Abfrage design-Entscheidungen, das wird sein, wie rasieren ein yak die Beine, um ihn schneller schwimmen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine table-variable ist nicht angemeldet in der aktuellen Datenbank, und ist nicht Gegenstand von Transaktionen. Warum denkst du, dass ein " truncate oder drop wäre, schneller als ein löschen? Haben Sie versucht das?
Keine Ergebnisse. Nun, wenn Sie das löschen wurden vollständig protokolliert, die in der aktuellen Datenbank (das ist, was macht
DELETE
langsamer alsTRUNCATE
für einen normalen Benutzer-Tabelle), würde man erwarten, dass dieDELETE
zu haben, wurden zurückgesetzt, und dieSELECT
haben sollte, die zurückgegebenen Daten. Aber Nein, das löschen ist nicht Teil der Transaktion. Man könnte logisch folgern, dassDELETE
undTRUNCATE
wäre sehr ähnlich, wenn nicht identisch, wurden die letzteren erlaubt.Wenn Sie verwenden müssen, um eine table-variable, verwenden Sie einfach einen löschen. Wenn Sie finden, dass es langsam, es ' s wahrscheinlich nicht, weil das löschen, ist es wahrscheinlich, weil Sie-wieder über eine table-variable in einer Schleife, anstatt mit einem Satz-Basis-Betrieb. Aber natürlich sind Sie in einer besseren position als jeder von uns, zu testen, wie viel langsamer Sie Ihren code, wenn Sie verwenden zwei verschiedene @table-Variablen-vs. re-mit einem single-table-variable und die Ausstellung eines löschen dazwischen. Aber ich denke immer noch, Ihre ganze Prozess muss erneut untersucht, weil es sich anhört sub-optimal, um mich auf vielen Ebenen.
Sicher, aber was Sie wirklich wollen, ist nicht eine Tabelle der parameter, stattdessen möchten Sie eine temporäre Tabelle.
EDIT: Der Einreicher kann sagen: "ich kann nicht, verwenden Sie eine table-variable, da es übergeben wird, um meine gespeicherte Prozedur mit der Option READONLY". In diesem Fall kann er sich einige Kilometer von der Umwandlung es in eine temporäre Tabelle.
Als seitliche Anmerkung, obwohl der SQL Server-Dokumentation behauptet, dass dies nicht der Fall, ich habe gesehen, Fälle, in denen temporäre Tabellen besser sind als table-Variablen. Ich glaube, das war, weil ich meine TEMPDB auf eine separaten Platte, die hatte viele IO-Kapazität zur Verfügung.
Bitte halten Sie im Verstand, obwohl, dass temporäre Tabellen, die leiden unter Benennung der Probleme - Sie sperren können Sie eine gespeicherte Prozedur, wenn es versucht, zu erstellen, zu einem Namenskonflikt für temporäre Tabellen. Tabelle Variablen, die nicht leiden unter diesem problem.
Table variable
nicht Tabellenwert-parameter.