ayuda con exec

03/02/2007 - 02:07 por Ele | Informe spam
hola a todos
Intento crear una funcion que regrese un valor flotante y reciba una cadena
de caracteres los campos de una tabla. La idea es que el usuario crea una
formula donde los operando son los campos ejemplo:

Declare @sSentencia varchar(254), @sFormula varchar(254), @fImporte float,
@nProdID int
Drop Table ##temp
Create Table ##temp
(Importe float)
Select @sFormula = 'UnitPrice * UnitsInStock' , @nProdID = 1

Select @sSentencia = 'Insert Into ##temp Select '+ @sFormula +' From
Northwind.dbo.Products Where ProductID = ' + Convert(varchar(10),@nProdID)
Select estoseejecuta=@sSentencia
Exec (@sSentencia)
Select @fImporte = Importe From ##temp
Select @fImporte

Alguien a hecho algo parecido o alguna idea para implementarla
gracias
 

Leer las respuestas

#1 Alejandro Mesa
03/02/2007 - 02:39 | Informe spam
Ele,

1 - No necesitas crear una tabla temporal global. Recuerda que este tipo de
tabla es vista por todas las conxiones y puedes tener problemas de
concurrencia cuando diferentes sesiones traten de eliminarla y crearla.
Tammbien cuando cada sesion haga el select desde la tabla.

2 - En vez de jugar con EXEC(...), te recomiendo le des un vistazo a
sp_executesql, pues con este se pueden usar parametros de salida.

declare @s nvarchar(4000)
declare @formula nvarchar(256)
declare @r sql_variant

set @formula = N'UnitPrice * UnitsInStock'
set @s = N'select @r = (' + @formula + N') from dbo.orders where productid =
@productid'

exec sp_executesql @s, N'@r sql_variant output, @productid int', @r output, 1

print @r

exec sp_executesql @s, N'@r sql_variant output, @productid int', @r output, 2

print @r
...


Mucho cuidado con la concatencion y la inyeccion de codigo sql.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html


AMB



"Ele" wrote:

hola a todos
Intento crear una funcion que regrese un valor flotante y reciba una cadena
de caracteres los campos de una tabla. La idea es que el usuario crea una
formula donde los operando son los campos ejemplo:

Declare @sSentencia varchar(254), @sFormula varchar(254), @fImporte float,
@nProdID int
Drop Table ##temp
Create Table ##temp
(Importe float)
Select @sFormula = 'UnitPrice * UnitsInStock' , @nProdID = 1

Select @sSentencia = 'Insert Into ##temp Select '+ @sFormula +' From
Northwind.dbo.Products Where ProductID = ' + Convert(varchar(10),@nProdID)
Select estoseejecuta=@sSentencia
Exec (@sSentencia)
Select @fImporte = Importe From ##temp
Select @fImporte

Alguien a hecho algo parecido o alguna idea para implementarla
gracias



Preguntas similares