SQL dinamico

martedì 19 settembre 2006 - 14.18

francy139 Profilo | Newbie

Ciao,

come posso far eseguire le query contenute dentro un campo di una tabella?
Mi spiego: nella tabella A c'è un campo txt_query che contiene una select, devo selezionare il campo e mettere il risultato della select in un'altra tabella.
So che si su Oracle che su Teradata questo è possibile richiamando delle finzioni di SQL dinamico.
Potete aiutarmi?

Grazie,
Francy

lbenaglia Profilo | Guru

>So che si su Oracle che su Teradata questo è possibile richiamando
>delle finzioni di SQL dinamico.

E tu con he DBMS vorresti farlo?
Ad esempio anche SQL Server permette l'esecuzione di codice dinamico mediante il comando EXEC() o la stored procedure di sistema sp_executesql.

>Grazie,
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

francy139 Profilo | Newbie

hai ragione, uso SQL Server e ho letto varie cose su EXEC() e sp_executesql.
Ho provato così:
<Declare Cursore1 Cursor For
SELECT TEMPO,
COD_ATTIVITA,
TXT_QUERY
FROM QUERY


-- Apertura cursore
Open Cursore1


-- Prima lettura 1° cursore
Fetch Next From Cursore1
Into @Mese,
@cod_attivita,
@txt_query

-- Valorizzazione della tabella d'appoggio
set @istruzione='insert into query_val(TEMPO,COD_ATTIVITA,VALORE_CAMPO)values('+@Mese+','+@cod_attivita+','+@txt_query+')'


EXEC sp_executesql @stmt=@istruzione>

ma non funziona.

francy

lbenaglia Profilo | Guru

>Ho provato così:
>ma non funziona.

Posta un esempio reale, con la struttura della tabella (CREATE TABLE...), alcune righe di prova (INSERT INTO...) e spiega quale deve essere lo scopo che vuoi raggiungere.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

francy139 Profilo | Newbie

Descrizione tabella sorgente:
TABLE [dbo].[QUERY] (
[TEMPO] [char] (8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[COD_ATTIVITA] [numeric](9, 0) NOT NULL ,
[TXT_QUERY] [varchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
nel campo TXT_QUERY c'è una select, tipo: 'select count(*) from pippo where cod_attivita=2 and tempo=20060801'


Descrizione tabella target:
TABLE [dbo].[QUERY_VAL] (
[TEMPO] [char] (8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[COD_ATTIVITA] [numeric](9, 0) NOT NULL ,
[VALORE_CAMPO] [numeric](9, 0) NULL
) ON [PRIMARY]
GO
nel campo VALORE _CAMPO devo mettere il risultato della SELECT contenuta nel campo QUERY.TXT_QUERY (che è sempre un numero)

dentro una Stored Procedure con un cursore volevo accedere alla tabella QUERY e per ogni chiave(tempo, cod-attivita) far eseguire la select corrispondente e mettere il risultato in QUERY_VAL

spero di essere stata più chiara

francy

lbenaglia Profilo | Guru

>spero di essere stata più chiara
OK, prova a dare un'occhiata al seguente esempio:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come vedi ho dovuto modificare le tue query aggiungendo un parametro di output valorizzato con il conteggio delle righe (@RowCount) che andrò a mappare con una variabile locale alla stored procedure (@Valore) utilizzata nel comando di INSERT.

Ogni ulteriore dettaglio lo troverai sui Books Online:

"sp_executesql (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms188001.aspx

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

francy139 Profilo | Newbie

proprio quello che volevo,

grazie mille!

francy
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