INF: Häufig gestellte Fragen - SQL Server 2000 - Tabellenvariablen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 305977 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
305977 INF: Frequently Asked Questions - SQL Server 2000 - Table Variables
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel beantwortet einige der häufig gestellten Fragen zu Tabellenvariablen, die in SQL Server 2000 eingeführt wurden.

Die Beschreibung von Tabellenvariablen in der SQL Server-Onlinedokumentation finden Sie auf folgender Microsoft-Website:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ta-tz_7ysl.asp

Weitere Informationen

F1: Warum wurden Tabellenvariablen eingeführt, obwohl bereits temporäre Tabellen zur Verfügung standen?

A1: Tabellenvariablen haben gegenüber temporären Tabellen die folgenden Vorteile:
  • Wie im Kapitel "Tabellen" in der SQL Server-Onlinedokumentation beschrieben, haben Tabellenvariablen wie z. B. lokale Variablen einen definierten Bereich, an dessen Ende sie automatisch gelöscht werden.
  • Im Vergleich zu temporären Tabellen haben Tabellenvariablen weniger Neukompilierungen einer gespeicherten Prozedur zur Folge.
  • Transaktionen, an denen Tabellenvariablen beteiligt sind, dauern nur so lange wie eine Aktualisierung der Tabellenvariable. Deshalb benötigen Tabellenvariablen weniger Ressourcen für Sperren und Protokollierung. Da Tabellenvariablen einen beschränkten Bereich haben und nicht Bestandteil der persistenten Datenbank sind, sind sie von Transaktionsrollbacks nicht betroffen.
F2: Was bedeutet die Aussage, dass Tabellenvariablen weniger Neukompilierungen einer gespeicherten Prozedur zur Folge haben als temporäre Tabellen?

A2: Der folgende Artikel behandelt einige Gründe für die Neukompilierung gespeicherter Prozeduren:

243586 Beheben eines Kompilierung der gespeicherten Prozedur
Der Abschnitt "Kompilierung aufgrund bestimmten temporären Tabellenoperationen" führt einige Voraussetzungen auf, die zu beachten sind, um eine Neukompilierung wegen temporärer Tabellen zu vermeiden. Diese Voraussetzungen gelten nicht für Tabellenvariablen.

Tabellenvariablen sind vollständig isoliert gegenüber dem Batch, der sie erstellt. Das bedeutet, dass bei einer CREATE- oder ALTER-Anweisung keine 'Neuauflösung' stattfinden muss, was bei einer temporären Tabelle der Fall sein kann. Temporäre Tabellen benötigen diese 'Neuauflösung', damit aus einer geschachtelten gespeicherten Prozedur auf die Tabelle verwiesen werden kann. Tabellenvariablen vermeiden dies vollständig, d. h., gespeicherte Prozeduren können einen bereits kompilierten Plan verwenden und so Ressourcen zur Verarbeitung der gespeicherten Prozedur einsparen.

F3: Welche Nachteile haben Tabellenvariablen?

A3: Hier einige Nachteile von Tabellenvariablen gegenüber temporären Tabellen:
  • Nicht gruppierte Indizes können für Tabellenvariablen nicht erstellt werden, ausgenommen die Systemindizes, die für eine PRIMARY- oder UNIQUE-Einschränkung erstellt werden. Im Vergleich zu einer temporären Tabelle mit nicht gruppierten Indizes kann dies die Abfrageleistung beeinträchtigen.
  • Tabellenvariablen führen keine Statistiken, wie das bei temporären Tabellen möglich ist. Statistiken können für Tabellenvariablen nicht über automatische Erstellung oder über die Anweisung CREATE STATISTICS erstellt werden. Deshalb kann bei komplexen Abfragen auf große Tabellen das Fehlen von Statistiken den Optimierer daran hindern, den besten Plan für eine Abfrage zu ermitteln, und so die Leistung der Abfrage beeinträchtigen.
  • Die Tabellendefinition kann nach der anfänglichen DECLARE-Anweisung nicht geändert werden.
  • Tabellenvariablen können in einer INSERT EXEC- oder SELECT INTO-Anweisung nicht verwendet werden.
  • CHECK-Einschränkungen, DEFAULT-Werte und berechnete Spalten in der Tabellentypdeklaration können keine benutzerdefinierten Funktionen aufrufen.
  • Sie können mit der EXEC-Anweisung oder mit der gespeicherten Prozedur sp_executesql keine dynamische SQL Server-Abfrage ausführen, die auf eine Tabellenvariable verweist, wenn die Tabellenvariable außerhalb der EXEC-Anweisung oder der gespeicherten Prozedur sp_executesql erstellt wurde. Da auf Tabellenvariablen nur in ihrem lokalen Bereich verwiesen werden kann, würden eine EXEC-Anweisung und eine gespeicherte Prozedur sp_executesql außerhalb des Bereichs der Tabellenvariable liegen. Sie können jedoch innerhalb der EXEC-Anweisung oder der gespeicherten Prozedur sp_executesql die Tabellenvariable erstellen und die gesamte Verarbeitung durchführen, da sich der lokale Bereich der Tabellenvariablen dann in der EXEC-Anweisung oder der gespeicherten Prozedur sp_executesql befindet.
F4: Sind Tabellenvariablen nur im Arbeitsspeicher befindliche Strukturen, denen eine bessere Leistung zugeschrieben wird als temporären oder permanenten Tabellen, da sie in einer Datenbank geführt werden, die auf dem physischen Datenträger liegt?

A4: Eine Tabellenvariable ist keine nur im Arbeitsspeicher befindliche Struktur. Da eine Tabellenvariable mehr Daten enthalten kann, als in den Speicher passen, benötigt sie einen Platz für die Datenbank auf der Festplatte. Tabellenvariablen werden wie temporäre Tabellen in der Datenbank tempdb erstellt. Wenn Speicherplatz verfügbar ist, werden sowohl Tabellenvariablen als auch temporäre Tabellen erstellt und verarbeitet, während sie sich im Speicher befinden (Datencache).

F5: Muss ich Tabellenvariablen anstelle von temporären Tabellen verwenden?

A5: Die Antwort hängt von den folgenden drei Faktoren ab:
  • Anzahl der Zeilen, die in die Tabelle eingefügt werden.
  • Anzahl der Neukompilierungen, aus denen die Abfrage gespeichert wird.
  • Typ der Abfragen und deren Abhängigkeit von Indizes und Statistiken bei der Leistung.
In manchen Situationen ist es nützlich, eine gespeicherte Prozedur mit temporären Tabellen in kleinere gespeicherte Prozeduren aufzuteilen, damit die Neukompilierung für kleinere Einheiten stattfindet.

Im Allgemeinen verwenden Sie Tabellenvariablen, wann immer dies möglich ist, außer bei großem Datenvolumen und wiederholter Verwendung der Tabelle. In diesem Fall können Sie Indizes für die temporäre Tabelle erstellen, um die Abfrageleistung zu erhöhen. Jedoch kann jedes Szenario anders aussehen. Microsoft empfiehlt zu testen, ob Tabellenvariablen für eine bestimmte Abfrage oder gespeicherte Prozedur geeigneter sind als temporäre Tabellen.

Haben Sie keine Antworten auf Ihre Fragen gefunden? Besuchen Sie in diesem Fall bitte die deutsche Microsoft SQL Server-Newsgroup unter der folgenden Adresse: Microsoft SQL Server-Newsgroups

Möchten Sie uns Ihre Meinung zu diesem oder anderen Knowledge Base-Artikeln zu Microsoft SQL Server mitteilen? Hinterlassen Sie uns eine Nachricht mit Ihrer Meinung unter: SQLKB@Microsoft.com

Eigenschaften

Artikel-ID: 305977 - Geändert am: Montag, 20. November 2006 - Version: 5.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
Keywords: 
kbfaq kbinfo KB305977
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com