SELECT Id,Title,descrizione
FROM Book
WHERE @sqlWhere
come è possibile risolvere questo problema?
grazie
Ciao Francesco,
L'unico modo è quello di ricorrere al Dynamic SQL concatenando il comando in
una stringa ed eseguendolo mediante EXEC o sp_executesql.
Prima di addentrarti in questo vespaio, leggi molto attentamente le
controindicazioni che trovi riassunte in questo articolo di Erland:
http://www.sommarskog.se/dynamic_sql.html
> grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit
Grazie anche da parte mia, Lorenzo.
Sto affrontando un problema analogo, ma con la difficoltà di eseguire li dynamic sql dall'interno di una funzione.
Purtroppo non riesco ad andare avanti a causa di questa restrizione: "Utilizzo non valido di un operatore con effetto collaterale 'EXECUTE STRING' nell'ambito di una funzione."
Ma nel mio caso si tratta di una banalissima assegnazione di variabili: exec ('set ' + @VarName1 + ' = ' + @VarName2)
Posso sperare in qualche altro tipo di soluzione?
Cordialità e ringraziamenti anticipati,
Giovanni Benintende
Ciao Giovanni,
Nelle UDF non puoi utilizzare il Dynamic SQL.
Soluzioni? Non utilizzarlo :-) o se proprio devi fallo in una stored
procedure.
> Grazie anche da parte mia, Lorenzo.
Per la verità un modo ci sarebbe... scrivendo una Extended Stored Procedure
che
esegue il comando SQL aprendo un'altra connessione.
Anche se la cosa è documentata nei Books Online, io me ne sono accorto solo
studiando i pattern
di codice utilizzati dal SQL Server Migration Assistant per Oracle che ne fa
un largo uso.
Riferimenti:
"The following statements are valid in a function: [...]
EXECUTE statements calling extended stored procedures. [...]"
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/864b393f-225f-4895-8c8d-4db59ea60032.htm
(nella sezione Remarks)
Faccio questa puntualizzazione solo perchè magari qualcuno trova il "trucco"
e lo consiglia :-)
Questa pratica è sconsigliatissima perché l'uso di Extended Procedures:
- può compromettere la stabilità del sistema (girano nello spazio processo
di SQL Server)
- pone problemi dal punto di vista delle prestazioni (per via di come
vengono schedulate le operazioni)
- è deprecato, saranno rimosse nelle versioni future del prodotto
FWIW dovrebbe funzionare anche facendo una UDF in .NET però ci sono una
serie di considerazioni
ulteriori da fare (prestazioni, sicurezza seconda quello che si cerca di
fare...) e valgono tutte le
considerazioni fatte da Erland nel suo articolo.
> Soluzioni? Non utilizzarlo :-) o se proprio devi fallo in una stored
> procedure.
Sono assolutamente daccordo.
Ciao,
--
Gianluca Hotz - SQL Server MVP
> Sto affrontando un problema analogo, ma con la difficoltà di eseguire li
> dynamic sql dall'interno di una funzione.
> Purtroppo non riesco ad andare avanti a causa di questa restrizione:
> "Utilizzo non valido di un operatore con effetto collaterale 'EXECUTE
> STRING' nell'ambito di una funzione."
> Ma nel mio caso si tratta di una banalissima assegnazione di variabili:
> exec ('set ' + @VarName1 + ' = ' + @VarName2)
Ciao Giovanni,
posso chiederti cosa stai cercando di fare esattamente?
Perché il frammento di codice che hai postato non funzionerebbe comunque
considerando la visibiltà delle variabili.
Esempio:
DECLARE @Var1 int;
DECLARE @Var2 int;
DECLARE @VarName1 sysname;
DECLARE @VarName2 sysname;
SET @Var1 = 0;
SET @Var2 = 1;
SET @VarName1 = '@Var1';
SET @VarName2 = '@Var2';
EXEC('SET ' + @VarName1 + ' = ' + @VarName2);