Nome tabella da una variabile

martedì 15 ottobre 2013 - 13.37

dompa72 Profilo | Senior Member

So che chiedo una cosa un po' strana.
Ho la necessità di creare una tabella nel TempDB che ha per nome un GUID, questo per permettere a più utenti in contemporanea di fare dei calcoli particolari su dei record utilizzando dei jion, farlo in c# è semplicissimo ma in T-SQL non lo so, faccio un esempio

Declare @Table as char(36) = Cast(NEWID() as char (36));
Create Table tempdb.dbo.@Table
(
Campo1 bigint,
Campo1 varchar(20)

);

a questo poi naturalmente devono seguire degli insert, join con altre tabelle ed infine un drop

è possibile questo oppure devo continuarlo a fare in C#

alx_81 Profilo | Guru

Ciao

>Ho la necessità di creare una tabella nel TempDB che ha per nome
>un GUID, questo per permettere a più utenti in contemporanea
>di fare dei calcoli particolari su dei record utilizzando dei jion
>è possibile questo oppure devo continuarlo a fare in C#
quindi i record sono condivisi da tutti? Oppure ognuno ne consuma solo la sua parte?

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member

E' una tabella momentanea di alcuni record, viene popolata, effettuati dei calcoli e poi eliminata, la tabella esiste solo in questo momento solo in quel momento e non più utilizzabile in futuro
Considera che il tutto viene fatto da un servizio chiamato da un client, quindi l'accesso per il motore database è sempre dello stesso utente (di database).

C'è un modo per non lanciare il tutto dal servizio???

Grazie

alx_81 Profilo | Guru

>E' una tabella momentanea di alcuni record, viene popolata, effettuati
>dei calcoli e poi eliminata, la tabella esiste solo in questo
>momento solo in quel momento e non più utilizzabile in futuro
>Considera che il tutto viene fatto da un servizio chiamato da
>un client, quindi l'accesso per il motore database è sempre dello
>stesso utente (di database).
Sì ma deve essere acceduta da più connessioni?

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member

No accetta solo la connessione corrente
In caso di più utenti verrà creata un'altra tabella.

Ho pensato di farla così:
begin tran t1
declare @name as varchar(50) = cast(NEWID() as char(36) );
declare @sql as varchar(500)
set @sql = 'create table [' + @name + '] (Campo1 smallint, Campo2 varchar(50))';
exec (@sql)
set @sql = 'insert into [' + @name + '] (Campo1, Campo2) values (1, ''Prova 1''),'
+' (2, ''Prova 2''),'
+' (3, ''Prova 3'')';
exec (@sql)
set @sql = 'select * from [' + @name + ']';
exec (@sql)
rollback tran t1

senza la transazione inserisco queste righe
set @sql = 'drop table [' + @name + ']';
exec (@sql

alx_81 Profilo | Guru

>No accetta solo la connessione corrente
>In caso di più utenti verrà creata un'altra tabella.
ma scusa allora sfrutta il tempdb..
crea una tabella #qualcosa che muore con la sessione.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member

>>No accetta solo la connessione corrente
>>In caso di più utenti verrà creata un'altra tabella.
>ma scusa allora sfrutta il tempdb..
>crea una tabella #qualcosa che muore con la sessione.

Ho provato da Management a creare una tabella

ho chiuso e riaperto il management ma la tabella resta lì

dove sbaglio???

>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://blogs.dotnethell.it/suxstellino
>http://suxstellino.wordpress.com
>http://mvp.microsoft.com/profiles/Alessandro.Alpi

alx_81 Profilo | Guru

>Ho provato da Management a creare una tabella
no no, non devi usare il management studio

devi scrivere la CREATE TABLE nello script SQL che vai a lanciare.
Ma ci sono vari modi, puoi usare:
- Tabella temp fisica (puoi fare più indici su di essa per velocizzare i calcoli)
CREATE TABLE #tabella (campi);
INSERT INTO #tabella(campi) Quello che vuoi...

oppure

SELECT campi INTO #tabella FROM altratabella..

- Tabella temp variabile
DECLARE @tabella TABLE (campi);
INSERT INTO @tabella (campi) Quello che vuoi...

fallo tutto dentro il tuo script SQL (o fai una stored procedure).
La tabella muore alla finedell'esecuzione (chiusura sessione).
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member

Grazie
faccio delle prove
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5