SQL2000: Session-Variable über View-Kaskade weitergeben.

12/11/2007 - 17:27 von Frank Boehland | Report spam
Ein abendliches Hallo,

ich hoffe, mein Problem verstàndlich machen zu können. Ich möchte eine
Information (einen Wert) in einer Session vorhalten, die am Ende einer
Abfrage/ View-Kaskade benötigt wird. Einstiegspunkt ist eine Abfrage, die in
der FROM-Klausel wieder eine Abfrage, wieder eine Abfrage, wieder eine
Abfrage ... enthàlt. Am Ende dieser Kaskade steht eine Abfrage, in der die
Information zum Tragen kommt.

Mein Problem:

Die (erste) Abfrage/ View kann nur aus einer SELECT-Anweisung bestehen.
Ich kann eine Funktion einnbauen, die aber das für die Session-Variable
notwendige SET CONTEXT_INFO nicht zulàßt.

Auch Überlegungen, eine temporàre Tabelle zu verwenden, gehen ins Leere, da
deren Information nur prozedur/funktion-intern wirkt.

Gibt es jemanden, der mich versteht und vielleicht helfen kann.

Mit Dank
Frank
 

Lesen sie die antworten

#1 Klaus Oberdalhoff
12/11/2007 - 18:25 | Warnen spam
Hi,

Auch Überlegungen, eine temporàre Tabelle zu verwenden, gehen ins
Leere, da deren Information nur prozedur/funktion-intern wirkt.



Wie Bitte ?

Aus der Hilfe zum SQL Server 2000 ("Erstellen und Ändern einer Tabelle")

Temporàre Tabellen

Sie können auch temporàre Tabellen erstellen. Temporàre Tabellen sind im
Prinzip mit dauerhaften Tabellen identisch. Der einzige Unterschied besteht
darin, dass temporàre Tabellen in tempdb gespeichert und automatisch
gelöscht werden, sobald sie nicht mehr verwendet werden.

Die beiden Typen temporàrer Tabellen, lokale und globale Tabellen,
unterscheiden sich hinsichtlich ihrer Namen, ihrer Sichtbarkeit und ihrer
Verfügbarkeit. Lokale temporàre Tabellen weisen als erstes Zeichen ihres
Namens ein einzelnes Nummernzeichen (#) auf. Sie sind nur im Rahmen der
aktuellen Verbindung des Benutzers sichtbar und werden gelöscht, sobald der
Benutzer die Verbindung zu Instanzen von Microsoft® SQL Server™ 2000 trennt.
Globale temporàre Tabellen weisen als erste Zeichen ihres Namens zwei
Nummernzeichen (##) auf. Nachdem sie erstellt wurden, sind sie für jeden
Benutzer sichtbar, und sie werden gelöscht, nachdem alle Benutzer, die auf
diese Tabelle verweisen, die Verbindung zu SQL Server getrennt haben.
Wenn Sie z. B. eine Tabelle mit der Bezeichnung employees erstellen, kann
diese Tabelle so lange von allen Benutzer verwendet werden, die in der
Datenbank über die Sicherheitsberechtigungen zu ihrer Verwendung verfügen,
bis die Tabelle gelöscht wird. Wenn Sie eine lokale temporàre Tabelle mit
der Bezeichnung #employees erstellen, können nur Sie allein mit dieser
Tabelle arbeiten. Sie wird gelöscht, sobald Sie die Verbindung trennen. Wenn
Sie eine globale temporàre Tabelle mit der Bezeichnung ##employees
erstellen, können alle Benutzer in der Datenbank mit dieser Tabelle
arbeiten. Wenn die Tabelle von keinem Benutzer verwendet wird, nachdem Sie
sie erstellt haben, wird die Tabelle gelöscht, sobald Sie die Verbindung
trennen. Wenn ein anderer Benutzer die Tabelle ebenfalls verwendet, nachdem
Sie sie erstellt haben, wird die Tabelle erst von SQL Server gelöscht,
nachdem Sie beide die Verbindung getrennt haben.

Für eine globaltemporàre Tabelle gilt das lt. Online-Hilfe nicht.

Zudem kann man auch "ganz normale" Tabellen als Temp-Tables "missbrauchen"
dadurch dass man sie nach dem Gebrauch einfach wieder löscht.

mit freundlichen Grüßen aus Nürnberg

Klaus Oberdalhoff

Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nàchstes Treffen in Nürnberg am 20.11.2007

Ähnliche fragen