2010-02-03 27 views
10

Ich bin auf der Suche nach einer temporären Tabelle, die als Zwischen-Tabelle beim Erstellen eines Berichts verwendet wird.SQL Server erstellt eine temporäre Tabelle aus einer anderen Tabelle

Für ein bisschen Hintergrund Ich bin ein VB 6 app portieren

die Tabelle .NET erstellen kann ich verwenden ...

SELECT TOP 0 * INTO #temp_copy FROM temp; 

Dieses eine leere Kopie der Temperatur erzeugt, aber es erstellt keinen Primärschlüssel

Gibt es eine Möglichkeit, eine temporäre Tabelle und die Einschränkungen zu erstellen?

Sollte ich die Einschränkungen später erstellen?

Oder bin ich besser dran nur die Tabelle erstellen create table, ich wollte dies nicht tun, weil es 45 Spalten in der Tabelle gibt und es würde die Prozedur mit viel unnötigen cruft füllen.

Die Tabelle ist erforderlich, weil eine Menge Leute, Berichte zur gleichen Zeit zu erzeugen sein kann, so kann ich einen einzigen Vermittler Tabelle nicht Sie tatsächlich einen Primärschlüssel verwenden

Antwort

7

Sie brauchen? Wenn Sie flirren und nur die für den Bericht benötigten Daten auswählen, müssen Sie nicht trotzdem jede Zeile in der temporären Tabelle aufrufen?

+0

Ich habe es nützlich gefunden, Indizes zu temporären Tabellen bei Gelegenheiten mit eindrucksvollen Ergebnissen hinzuzufügen. Es kann Zwischenverarbeitung oder JOINs etc geben – gbn

+1

@ gbn: sicher. Ich füge sie hinzu, wenn sie benötigt werden. –

+0

Sie haben Recht, es kann überflüssig sein. Ich muss jedes Verfahren überprüfen. Ursprünglich verwendete die Anwendung eine einzige temporäre Tabelle mit einem Primärschlüssel, aber die Anzahl der Benutzer war klein, jetzt habe ich Bedenken, dass die temporäre Tabelle zu einem Engpass werden wird, da es viel mehr Benutzer gibt – DeveloperChris

6

würden Sie haben eine oder das andere zu tun:

  • die
  • erklären ausdrücklich, die temporäre Tabelle mit Einschränkungen danach PK/Indizes hinzufügen.

Ich würde dies auch eher dann 0 TOP

SELECT * INTO #temp_copy FROM temp WHERE 1 = 0; 
7

konstruktions SELECT INTO nicht über Einschränkungen nicht trägt (PK, FK, Unique), Defaults, Schecks etc. Dies liegt daran, Ein SELECT INTO kann tatsächlich aus mehreren Tabellen gleichzeitig ziehen (über Joins in der FROM-Klausel). Da SELECT INTO aus den angegebenen Tabellen eine neue Tabelle erstellt, kann SQL wirklich nicht bestimmen, welche Einschränkungen Sie beibehalten möchten und welche nicht beibehalten werden sollen.

Sie könnten eine Prozedur/ein Skript schreiben, um die Einschränkung automatisch zu erstellen, aber es ist wahrscheinlich zu viel Aufwand für minimalen Gewinn.

+0

Danke für die Erklärung, ziemlich offensichtlich, nehme ich einmal an Du siehst den Grund. – DeveloperChris

Verwandte Themen