28 messaggi dal 21 marzo 2006
Ciao a tutti,
mi sapete dire come posso fare per comporre dinamicamente il nome di una colonna in una query? Ho l'esigenza di crearmi Questo è un banale esempio di quello che voglio fare:

SELECT ID, 'STRINGA1' + 'STRINGA2'(MIACOLONNA) FROM TABELLA

Grazie
652 messaggi dal 21 gennaio 2007
Contributi
se STRINGA1 e STRINGA2 sono due colonne allora prova con:

SELECT ID, (Colonna1 + ' ' + Colonna2) AS NomeNuovaColonna FROM tabella
28 messaggi dal 21 marzo 2006
PeppeDotNet ha scritto:
se STRINGA1 e STRINGA2 sono due colonne allora prova con:

SELECT ID, (Colonna1 + ' ' + Colonna2) AS NomeNuovaColonna FROM tabella


Grazie della risposta, ma non è esattamente quello che cercavo.
Provo a fare un altro esempio per essere più chiaro, questo le scenario:
supponiamo di avere una tabella che abbia come campi ID, COLONNA01, COLONNA02.

ID | COLONNA01 | COLONNA02
21 | ciao ciao | arrivederci

Ora io ho la necessita di pescare nella mia query il contenuto o di COLONNA01 o di COLONNA02 costruendo il nome della colonna in maniera dinamica del tipo:

SELECT ID, ['COLONNA' + '01'] AS COLONNA FROM TABELLA

per ottenere come risultato il valore delle colonne ID e COLONNA01 rinominata in COLONNA, quindi:

ID | COLONNA
21 | ciao ciao

Se utilizzassi la query che mi hai dato come risposta il risultato ottengo il risultato che otterrei sarebbe, oltre alla colonna ID, una colonna nominata NomeNuovaColonna con valore uguale alla stringa composta da Colonna1 + Colonna2, della serie:

ID | NomeNuovaColonna
21 | Colonna1Colonna2

Sapete aiutarmi???
Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
Ulisse2001 wrote:
Ciao a tutti,
mi sapete dire come posso fare per comporre dinamicamente il nome di una colonna in una query? Ho l'esigenza di crearmi Questo è un banale esempio di quello che voglio fare:

SELECT ID, 'STRINGA1' + 'STRINGA2'(MIACOLONNA) FROM TABELLA
la costruzione dinamica non e' ammessa..
a seconda del dbms che utilizzi puoi eventualmente generare un comando completamente dinamico da far eseguire al sottosistema che permette l'esecuzione di codice dinamico, in SQL Server, ad esempio, la cosa diventa DECLARE @cmd varchar(n)
SET @cmd = 'SELECT Id, ' + @ParametroColonna + ' FROM tabella;'; EXEC (@cmd);

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
28 messaggi dal 21 marzo 2006
Andrea Montanari ha scritto:
salve,
Ulisse2001 wrote:
Ciao a tutti,
mi sapete dire come posso fare per comporre dinamicamente il nome di una colonna in una query? Ho l'esigenza di crearmi Questo è un banale esempio di quello che voglio fare:

SELECT ID, 'STRINGA1' + 'STRINGA2'(MIACOLONNA) FROM TABELLA
la costruzione dinamica non e' ammessa..
a seconda del dbms che utilizzi puoi eventualmente generare un comando completamente dinamico da far eseguire al sottosistema che permette l'esecuzione di codice dinamico, in SQL Server, ad esempio, la cosa diventa DECLARE @cmd varchar(n)
SET @cmd = 'SELECT Id, ' + @ParametroColonna + ' FROM tabella;'; EXEC (@cmd);

saluti



Grazie Andrea, ho seguito il tuo consiglio e mi sono creato una stored procedure per ottenere il risultato che volevo, ma ora mi trovo davanti un altro problema: i dati ottenuti mi servno per completare una select che coinvolge un'altra tabella. E' possibile fare una cosa del genere?

SELECT * FROM Tabella
INNER JOIN
(exec MiaStoredProcedure @Parametro = Tabella.Campo2) Temp
on Tabella.Campo = Temp.Campo

il mio problema è che devo passare come parametro della stored procedure il valore di un campo della tabella messa in relazione e poi aggiungere i risultati ottenuti al resto delle informazioni...
so che è un po' contorto ma non ho trovato altre strade che mi abbiano portato ad un risultato.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
Ulisse2001 wrote:
Grazie Andrea, ho seguito il tuo consiglio e mi sono creato una stored procedure per ottenere il risultato che volevo, ma ora mi trovo davanti un altro problema: i dati ottenuti mi servno per completare una select che coinvolge un'altra tabella. E' possibile fare una cosa del genere?

SELECT * FROM Tabella
INNER JOIN
(exec MiaStoredProcedure @Parametro = Tabella.Campo2) Temp
on Tabella.Campo = Temp.Campo

il mio problema è che devo passare come parametro della stored procedure il valore di un campo della tabella messa in relazione e poi aggiungere i risultati ottenuti al resto delle informazioni... so che è un po' contorto ma non ho trovato altre strade che mi abbiano portato ad un risultato.

e' molto contorto, potenzialmente pericoloso e poco performante... per tua informazione dai una letta a http://www.sommarskog.se/dynamic_sql.html.. a prescindere da cio', non mi viene in mente niente di intelligente.. quello che dovresti fare e' in teoria caricare una tabella temporanea con il risultato di EXEC (@cmd), che e' fattibile, solo che tu, a priori, non conosci la struttura della tabella temporanea stessa, e non e' ovviamente possibile generare dinamicamente la tabella con una specie di SELECT INTO #t EXEC(@cmd);
se tu sei in grado di generare precedentemente la tabella temporanea in base ai parametri che ti vengono passati allora puoi ovviamente caricarla con CREATE TABLE #t ( ......);
INSERT #t EXEC (@cmd);
...... fai qualche cosa con la tab #t
DROP TABLE #t;

ma devi averla precedentemente creata..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.