none
Funzione che ritorni il risultato di una query (passata come parametro varchar) RRS feed

  • Domanda

  • Salve a tutti !

    Avrei una curiosità da proporvi,

     

    Vorrei creare una funzione che si occupi di eseguire una query passata come parametro

    e di restituire il risultato in una variabile di tipo TABLE, più o meno così :

     

    CREATE FUNCTION [dbo].[ExecQuery] ( @sSQL Varchar(1000) ) RETURNS @Tabella TABLE (Col1 INT PRIMARY KEY, Col2 varchar(100))
        BEGIN
            INSERT INTO ...Risultato della query @sSQL
            RETURN
        END

    Come posso eseguire la query all'interno della funzione, e inserire il risultato in @Tabella ??E' possibile farlo in una funzione?

    Debbo usare una procedura ? Come?

     

    Grazie per le eventuali risposte

    martedì 29 marzo 2011 09:08

Risposte

  • crea una query in management studio o equivalente di SQL 2000 scrivi sp_executesql e premi SHift F1 i books online di SQL Server mostrano vari esempi d'uso, una versione semplificata potrebbe essere:

     

    EXECUTE sp_executesql 
         N'SELECT * FROM AdventureWorks.HumanResources.Employee 
         WHERE ManagerID = @level',
         N'@level tinyint',
         @level = 109;

    Ovviamente nella stringa puoi mettere quello che vuoi anche componendolo al volo. Io l'ho utilizzata per comporre al volo le query pivot.

    HTH


    Sabrina
    • Contrassegnato come risposta AngeloNew giovedì 31 marzo 2011 17:13
    giovedì 31 marzo 2011 15:01

Tutte le risposte

  • Come posso eseguire la query all'interno della funzione, e inserire il risultato in @Tabella ??E' possibile farlo in una funzione?

    Debbo usare una procedura ? Come?

    Ciao Angelo,

    emm in una UDF non puoi eseguire modifiche ai dati: User Defined Functions (UDF) Limitations

    Altrimenti potresti utilizzare Table-Valued User-Defined Functions (anche se non è proprio quello che hai chiesto) in questo caso il dataset ti viene restituito in output, ma l'SQL della query deve essere noto.

    Con una stored procedure puoi fare quello che hai chiesto :)

    Ciao!


    Sergio Govoni
    SQL Server MVP
    MVP Profile: https://mvp.support.microsoft.com/profile/Sergio.Govoni
    Blog: http://community.ugiss.org/blogs/sgovoni
    martedì 29 marzo 2011 12:21
    Moderatore
  • A me serve fare solo query di estrazione (SELECT), non debbo apportare modifiche dall'interno della Funzione(Io lavoro con SQL 2000),

    come faccio ad eseguire la query all'interno della funzione se non posso utilizzare EXECUTE con la stringa SQL parametro ? Come posso riempire l'output di tipo TABLE in queste condizioni ?

    Se debbo usare una procedura, posso utilizzare un parametro OUTPUT di tipo TABLE ?
    martedì 29 marzo 2011 13:23
  • crea una query in management studio o equivalente di SQL 2000 scrivi sp_executesql e premi SHift F1 i books online di SQL Server mostrano vari esempi d'uso, una versione semplificata potrebbe essere:

     

    EXECUTE sp_executesql 
         N'SELECT * FROM AdventureWorks.HumanResources.Employee 
         WHERE ManagerID = @level',
         N'@level tinyint',
         @level = 109;

    Ovviamente nella stringa puoi mettere quello che vuoi anche componendolo al volo. Io l'ho utilizzata per comporre al volo le query pivot.

    HTH


    Sabrina
    • Contrassegnato come risposta AngeloNew giovedì 31 marzo 2011 17:13
    giovedì 31 marzo 2011 15:01
  • grazie, era quello che mi serviva
    giovedì 31 marzo 2011 17:13