Un dato mas importante, yo no usaria exec() sino sp_executesql y ademas te comento que el uso de SQLDinamico de esta manera atenta contra la seguridad y el modelo de Sp's ya que vas a tener que darle a los usuarios no solo acceso a la funcion sino tambien a los objetos que esta llame

2006/10/12, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
Ese mensaje en particular no sé a qué se refiere, pero en general me parece que no se puede usar exec dentro de una función. Sí dentro de un store procedure.
 
(Además veo que hay errores en el armado del query en sí, pero eso es otro problema. La ubicación de la clausula into, los campos insertados difieren con los campos de la tabla..., pero no es ese el tema de la colgada).
 
Saludos, Daniel
 

-----Original Message-----
From: "Julian Berlin" < [EMAIL PROTECTED]>
To: "dbms List Member"  <[email protected]>
Date: Thu, 12 Oct 2006 15:26:56 -0300
Subject: [dbms] Error al uUsar EXEC desde una funcion


Hola gente

Tengo el siguiente problema , tengo la siguiente Query de SQL en donde uso la funcion EXEC() para ejecutar una Quero dinámicamente:

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

CREATE FUNCTION dbo .GetCountries

(

      @QuerySearch VarChar (8000 )

   

)

 

RETURNS @Countries TABLE(CountryName varchar( 50 ), ClientName varchar (50 ) , AnnualicedA  numeric(18 ,4) ,

                    AnnualicedB  numeric ( 18,4) ,MarketSharesA  numeric(18,4) , MarketSharesB  numeric (18 ,4),evolution numeric (18,4) )

AS

BEGIN

 

Declare @SQL VarChar (8000)

--DECLARE @Countries TABLE(Country varchar(50))

 

SET @SQL = 'SELECT DISTINCT E_COUNTRY.X_country_name AS Country

                     FROM

                     E_GPS_CONTRACT LEFT OUTER JOIN  E_COUNTRY ON E_COUNTRY.Country_ID = E_GPS_CONTRACT.Country_ID

                     WHERE E_COUNTRY.X_country_name IS NOT NULL '

 

SET @SQL = @SQL +   @QuerySearch + 'INTO @Countries'

 

Exec ( @SQL )

 

RETURN

 

END

GO

-------------------------------------------------------------------------------

Pero al querer ejecutarlo me tira el siguiente error y no tengo idea que puede ser…:

 

Msg 443, Level 16, State 14, Procedure GetCountries, Line 22

Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.

 

 

Si alguien tiene idea que puede ser lo agradecere

Saludos

 

 

 

Julián R Berlín
Hexacta S.A.
tel. +54 11 4779 6326.
Andrés Arguibel 2860.
Buenos Aires, Argentina.




--
----------------------------------------------------
Microsoft MVP (Most Valuable Professional) SQL Server
Orador Culminis
(www.sqlgurus.org)
-------------------------------------------

Responder a