26 messaggi dal 25 marzo 2006
Salve a tutti

Ho creato una tabella temporanea #temp

Se voglio verificare se esite o meno prima di ricrearla come faccio?

Uso sqlserver 2005 express

Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Puoi verificare l'object id della tabella. Se NULL significa che la tabella non esiste. Ad esempio

CREATE TABLE #tmp
(
ID int
)
GO

IF OBJECT_ID('tempdb..#tmp') IS NULL
PRINT 'La tabella non esiste'
ELSE
PRINT 'La tabella esiste'

Bye
26 messaggi dal 25 marzo 2006
Tenendo presente che la pagina in questione è scritta in asp,
e che all'inizio della pagina apro la connessione (conn1) al db per poi chiuderla in fondo alla pagina, ho risolto il tutto facendo così:

ho aperto una nuova conn (conn2) indicando come db tempdb
ho letto sys.tables where name = #temp
se reccount > 0 drop #table usando però la connessione primaria (conn1) al mio vero db

tra l'altro la tabella temporanea la creo non con una create table, bensì a partire da una select:

select * into #temp from tabella

Grazie cmq dell'interessamento.
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
mariokam ha scritto:
ho aperto una nuova conn (conn2) indicando come db tempdb
ho letto sys.tables where name = #temp
se reccount > 0 drop #table usando però la connessione primaria (conn1) al mio vero db


Una tabella temporanea locale (ovvero quelle con il prefisso #) sono visibili SOLO dalla connessione che l'ha creata e non la vedrai mai da un'altra connessione.
Inoltre nella sys.tables, per questo tipo di tabelle temporanne, al nome con cui le referenzi viene aggiunto un suffisso al fine di renderle internamente univoche anche nel caso in cui 2 o più utenti creino simultaneamente delle tabelle temporanee locali con lo stesso nome. Pertanto a fronte della tabella #tmp creata in una connessione, nella sys.tables troverai qualcosa tipo

#tmp_____________[cut]____________________000000000216

Per questo motivo non ti ho proposto l'interrogazione diretta della sys.tables ma l'utilizzo della funzione OBJECT_ID...


tra l'altro la tabella temporanea la creo non con una create table, bensì a partire da una select:


Non cambia nulla


Grazie cmq dell'interessamento.


Bye
26 messaggi dal 25 marzo 2006
E come ottengo OBJECT_ID('tempdb..#tmp') con asp?
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
mariokam ha scritto:
E come ottengo OBJECT_ID('tempdb..#tmp') con asp?


Così come lo otterresti in qualunque altro linguaggio... Devi solo fare una select e verificare se restituisce null o no.
Comunque penso che ti sfugga anche il fatto che puoi evitare di eliminare questo tipo di tabelle in quanto vengono rimosse alla chiusura della connessione che le ha create.
Ha senso testarne la presenza solo se devi decidere se fare un SELECT INTO #tmp
oppure un INSERT #tmp SELECT FROM ecc...

Bye




Modificato da l.bianchi il 24 luglio 2007 14.04 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.