Newsgroup: it.comp.lang.visual-basic
Titolo: Tabella temporanea sql server

Ciao a Tutti!!!
E' possibile eseguire da Query Analyzer una select della Tabella temporanea?
Mi spiego, creo una tabella temporanea con una store_procedure, ma poi non
riesco a fare da Query Analyzer "SELECT * FROM temp_TBRicercaGlobale" perchè
genera errore:
"nome temp_TBRicercaGlobale oggetto non valido".
Come potrei fare?
Grazie Mille a Tutti!!!
--------------------------------
Inviato via 
http://usenet.libero.it


Se la tabella è stata creata da una SP su disco, la devi vedere
regolarmente.
Al limite potrebbero esserci problemi di autorizzazione dell'utente che
utilizzi, perchè la tabella appena creata è di proprietà dell'utente che ha
eseguito la query, e l'utente con cui usi QA potrebbe non avere diritti di
dbo sul DB.
Se invece stai parlando di tabelle residenti in memoria, e non su disco,
devi usare i simboli # o ## a seconda dello scope di visibilità che
richiedi.
Altra possibilità, è che la SP abbia girato all'interno di una transaction
non ancora chiusa, ma questo lo puoi sapere solo tu.
Ciao
Alberto

Non è un problema di simboli perchè ho provato anche a mettere davanti al
nome della tabella #, ma non funziona lo stesso.
Penso sia un problema di autorizzazioni. A questo punto creo la tabella
temporanea da VB, senza usare store_procedure.
Grazie per l'aiuto!


 Grazie per l'aiuto!
salve,
come ti ha detto Albe, le tabelle temporanee sono precedute da #  ovvero ##
a seconda della visibilita', # per tabelle private alla connessione e ## per
tabelle globali
prova questo:
apri Query Analizer e, su un db di prova scrivi
CREATE TABLE #tmpTB ([id] [int] NOT NULL)
INSERT #tmpTB VALUES (1)
SELECT * FROM #tmpTB
ed esegui.... ti verra' ritornato nei risultati "1"
ora apri un'altra finestra di query ed esegui
SELECT * FROM  #tmpTB
ti verra' ritornato "il nome di oggetto "#tmpTB" non e' valido (o simile),
in quanto lo scope della tabella temporanea #tmpTB  e' privata per la
connessione che la ha creata e non e' possibile estendere alcun tipo di
privilegio ad altre connessioni, ed esiste solo per il tempo che la
connessione che la crea resta in vita.... e non e' possibile collisioni di
nomi, nel senso che due o piu' connessioni diverse possono creare tabelle
temporanee private con lo stesso nome...
ora, sulla query dove c'e' lo statemente CREATE, esegui un DROP TABLE #tmpTB
...
successivamente scrivi
CREATE TABLE ##tmpTB ([id] [int] NOT NULL)
INSERT ##tmpTB VALUES (1)
SELECT * FROM ##tmpTB
apri un'altra finestra di query ed esegui
SELECT * FROM  ##tmpTB
anche qui ti verra' ritornato nei risultati "1"
sulla query dove c'e' lo statemente CREATE, esegui un DROP TABLE ##tmpTB ...
usando il prefisso ## nella creazione di una tabella temporanea, viene
generata un tabella globale, visibile da tutte le connessioni, anche senza
espliciti privilegi, possono chiaramente eistere problemi di collisione di
nomi in quanto globale, e rimangono gli stessi presupposti per il ciclo di
vita della tabella globale temporanea, esiste fionco a che la connessione
che l'ha creata e' in vita e tutte le connessioni ad essa correlate sono in
vita. Dopo la chiusura della connessione di creazione, solo le connessioni
in vita hanno ancora la possibilita' di accedervi e terminare le
operazioni...
tutte le tabelle temporanee vegnono create in tempdb, per cui attenzione
alla sua eventuale crescita, in quanto quese operazioni sono loggate e le
eventuali transazioni possono avere sia un Commit che un Rollback
saluti
Andrea Montanari
montanar...@virgilio.it
http://utenti.lycos.it/asql/index.html
DbaMgr2k ver 0.1.0  -  DbaMgr ver 0.47.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply