Tabelle temporane di Sqlserver e Sqldatasource

lunedì 05 maggio 2008 - 22.57

kontax Profilo | Junior Member

Ciao a tutti,
sto cercando di imparare ad usare le tabelle temporanee di Sqlserver, ed ho un paio di domandine..
1)prima cosa: posso usarle con le sqldatasource?cioè, posso semplicemente modificare le istruzioni di select inserendoci il nome della tabella temporanea su cui deve andare ad agire, sapendo che questa in ogni caso viene creata prima dell'esecuzione di istruzioni della sqldatasource?
2)seconda cosa, meno inerente ad asp.net, ma visto che ho aperto il thread..per creare la tabella tempranea uso il comando "select * into #table from table", ma quando nelle successive funzioni cerco di lavorare su #table mi dice che "Il nome di oggetto '#table' non è valido.". Cosa sbaglio?
Con le tabelle temporanee dovrei evitare problemi di utilizzo concorrenziale delle stesse tabelle da parte di diversi utenti, salvando poi le modifiche alla fine con una transazione, giusto?
Grazie, ciaoo

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao!

>sto cercando di imparare ad usare le tabelle temporanee di Sqlserver,
>ed ho un paio di domandine..
>1)prima cosa: posso usarle con le sqldatasource?cioè, posso semplicemente
>modificare le istruzioni di select inserendoci il nome della
>tabella temporanea su cui deve andare ad agire, sapendo che questa
>in ogni caso viene creata prima dell'esecuzione di istruzioni
>della sqldatasource?
Le tabelle temporanee di sql server possono essere locali o globali. Le locali (#nome) sono valide solo a livello di sessione e quindi puoi crearle ed utilizzarle all'interno, per poi perderle alla chiusura della sessione stessa. Quelle globali (##nome) sono di scope più ampio. Sono visibili a tutti gli utenti e a tutte le sesisioni e sono vive fino a che l'ultimo utente che la usa si disconnette dall'istanza di SQL Server. Di conseguenza, è meglio non usarle direttamente.
Che ne dici di utilizzare invece una stored procedure che crea un'eventuale (o più) tabelle temporanee locali? In questo modo, chiami la sp nel sql datasource e sei a posto..

>2)seconda cosa, meno inerente ad asp.net, ma visto che ho aperto
>il thread..per creare la tabella tempranea uso il comando "select
>* into #table from table", ma quando nelle successive funzioni
>cerco di lavorare su #table mi dice che "Il nome di oggetto '#table'
>non è valido.". Cosa sbaglio?
La sessione non è la stessa. Segui la strada della stored procedure.

>Con le tabelle temporanee dovrei evitare problemi di utilizzo
>concorrenziale delle stesse tabelle da parte di diversi utenti,
>salvando poi le modifiche alla fine con una transazione, giusto?
Dipende dai casi. E dipende anche dalla versione di SQL Server che utilizzi.
Perchè comumque, la SELECT INTO fa un lock shared sulla tabella che va a leggere..

>Grazie, ciaoo
di nulla!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

kontax Profilo | Junior Member

Grazie mille per la risposta...
Però ho ancora un po' di dubbi..
Magari se ti spiego cosa devo fare mi puoi consigliare
Praticamente voglio che gli utenti quando vanno a fare delle modifiche sul database, lavorino su delle tabelle "di lavoro" su cui vengono apportate le modifiche passo passo. Alla fine del lavoro da svolgere, viene dato il comando che aggiorna le tabelle "fisse" con quelle dell'ambiente di "lavoro".
Ovviamente, gli utenti non possono lavorare sulle stesse tabelle di lavoro in contemporanea, xchè altrimenti ci sarebbe il rischio di modifiche in concorrenza fra loro.
Avevo pensato di creare un campo che si occupi solo di mekorizzare un id per lutente per ogni tabella, così ogni utente potrebbe modificare solo i propri record, ma poi ho sentito parlare delle tabelle temporanee di sqlserver.
Quindi mi servirebbero delle tabelle su cui lavorare, diverse per ogni utente. In tal senso avevo capito che queste temporary tabs erano utilizzabili solo dalla sessione che le ha create, e che si cancellano con la chiusura della sessione..ma evidentemente non si parlava di sessione come la intendevo io..
Mi hai scritto di usare le stored procedure, ma non saprei come mi possano aiutare...suggerimenti su come implementare la cosa?
Fra laltro questo dovrebbe evitarmi di usare transazioni, almeno fino a che non vado a trasferire i dati dall'ambiente di "lavoro" a quello "stabile", no?
Grazie mille, e scusate se alla fine la discussione parla di sql server anche se è nella sezione asp.net..

alx_81 Profilo | Guru

>Grazie mille per la risposta...
Di nulla!

>suggerimenti su come implementare la cosa?
A questo punto, dopo aver visto quello che devi fare, puoi pensare di utilizzare una tua classe e la session. Mi spiego.
Puoi pensare di crearti l'oggetto con le proprietà che rispecchiano i campi e con un metodo Update che aggiorna l'oggetto stesso.
Una volta creata, popolata e gestita la classe puoi pensare di salvarla nella session.
Ad ogni passo, prima del salvataggio delle info ricavi dalla session il tuo oggetto e poi esegui Update, andando ad aggiornare le proprietà che ti servono. Infine risalvi in session. Se sei all'ultimo passo, salvi su db, con un metodo UpdateToDB (ad esempio).

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5