Hola Daniel, ante este modelo creo que estas muy complicado de verdad :(
En 2005 seria otra cosa porque con CLR lo podriamos resolver de una
forma muy simple pero en 2000 mmmm.

Si solo podes hacer vistas y crear funciones (las cuales si podes usar
en las vistas) vas a estar complicado porque vas a tener que crear la
funcion y usar esta logica de negocios dentro.

No tenes opcion de sacar esto del motor? porque vas a tener muchos
pero muchos problemas de loqueos , performance, etc haciendo lo que
intentas realizar :(


--
-----------------------------------------------------------
Microsoft MVP en SQL Server
Mentor asociado en SQLTotalConsulting
(excelencia en servicios y consultoria  SQLServer)
Orador Culminis - Microsoft Influencier
www.sqltotalconsulting.com
-----------------------------------------------------------


El 6/07/07, Daniel Calvin <[EMAIL PROTECTED]> escribió:
Ahhhhh, ahi te entedi.....  :((

La cosa es asi maxi, la info se consume desde un sistema que no tengo forma
de tocar.
Lo que si puedo hacer es:
    1 - definir parametros de filtrado para una vista.
    2 - definir vistas
    3 - incluir en esas vistas campos desconocidos para la aplicación

Entonces construyo una vista que basicamente tenga algo asi:

Select a, b, c,
dbo.fncGetEMail(d2tdoc,d2ndoc,d2pciae,d2juris,m01pri) as
miEmail  from  miTabla

Podría escribir una vista que internamente llame un Store, pero cuando la
aplicación que la consume arme los filtros para el where sone......

Se entiende ahora Maxi?

Gracias

Daniel Calvin


El día 6/07/07, Maxi Accotto <[EMAIL PROTECTED]> escribió:
> Dani, pero no entiendo porque queres usar funciones, porque no usas
> Stores Procedures?
>
>
> El 6/07/07, Daniel Calvin <[EMAIL PROTECTED]> escribió:
> > Hola Maxi
> >
> > Van las funciones:
> >
> > FUNCTION dbo.fncGetEMail
> >     (@TipoDoc int,
> >      @NroDoc varchar(15),
> >      @CodEmision int,
> >      @Filial int,
> >      @Sector int
> >     )
> > RETURNS varchar(255)
> > AS
> > BEGIN
> >     DECLARE @EMail AS varchar(255)
> >     declare @Vencido as bit
> >     declare @Enabled as bit
> >
> >     set @enabled=dbo.fncIsWSEnabled ()
> >
> >     SELECT  @Vencido= case
> >         when (DATEADD(day, DiasTTL, UltimaAct)) < hoy then 1
> >         else 0
> >         end
> >     FROM         dbo.CacheWSBUP
> >     WHERE
> >         (D2TDOC = @TipoDoc )
> >         AND (D2NDOC = @NroDoc )
> >         AND (CodEmision = @CodEmision )
> >
> >     If(@Enabled=1 and isnull(@Vencido,1)=1)
> >     begin
> >         if( not exists(select idfilial from CacheWSIgnoreFilial where
> > [EMAIL PROTECTED] ))
> >         begin
> >             set
> >
@EMail=dbo.fncGetEMailFromWS(@TipoDoc,@NroDoc,@CodEmision,@Filial
> > )
> >         end
> >
> >     end
> >     else
> >     begin
> >         SELECT  @EMail=ExecutiveEmail
> >         FROM         dbo.CacheWSBUP
> >         WHERE
> >             (D2TDOC = @TipoDoc )
> >             AND (D2NDOC = @NroDoc )
> >             AND (CodEmision = @CodEmision )
> >     end
> >
> >     IF(@EMail='' or @EMail is null )
> >     Begin
> >         Select @EMail = dbo.sectormail(@Sector)
> >     End
> >     RETURN @EMail
> > END
> >
> >
> > Aqui va la otra, esta es la que debe actualizar la cache.
> >
> > FUNCTION dbo.fncGetEMailFromWS
> >     (@TipoDoc smallint,
> >      @NroDoc varchar(15),
> >      @CodEmision smallint,
> >      @Filial smallint
> >     )
> > RETURNS varchar(255)
> > AS
> > BEGIN
> >
> > declare @email varchar(255)
> > DECLARE @object int
> > DECLARE @hr int
> > DECLARE @src varchar(4096), @desc varchar(255)
> >
> > DECLARE @URI varchar(255)
> >
> > DECLARE @Executive varchar(255)
> > DECLARE @Manager varchar(255)
> > DECLARE @Zonal varchar(255)
> > DECLARE @Regional varchar(255)
> > DECLARE @LError varchar(4096)
> >
> >
> >
> > SELECT @URI=    Valor
> > FROM         dbo.CacheWSParametros
> > WHERE     (IDparametro = 'uri')
> >
> > set @NroDoc=convert(varchar(20),cast( @NroDoc as
numeric))
> >
> > SET @LError='Desconocido.'
> > EXEC @hr = sp_OACreate 'CSFacade.WSFacade', @object OUT
> > IF @hr <> 0
> >     BEGIN
> >        EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
> >        RETURN @desc
> >     END
> > ELSE
> >     BEGIN
> >        EXEC @hr=sp_OAMethod @object,'GetExecInLine',@src out, @URI,
> > @TipoDoc, @NroDoc, @CodEmision, @Filial, @Executive out, @Manager out,
> > @Zonal out, @Regional out, @LError out
> >        IF @hr <> 0
> >         BEGIN
> >            EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
> >            RETURN @desc
> >         END
> >        ELSE
> >         BEGIN
> >            set @[EMAIL PROTECTED]
> >         END
> >     END
> >     /*
> >         if( exists( select * from dbo.CacheWSBUP WHERE     (D2TDOC =
> > @TipoDoc) AND (D2NDOC = @NroDoc) AND (CodEmision = @CodEmision)))
> >         BEGIN
> >             exec dbo.gmcDeleteCache @TipoDoc,@NroDoc,@CodEmision
> >         END
> >
> >         exec dbo.gmcInsertCache @TipoDoc,@NroDoc,@CodEmision,
> >
@Executive,@Manager,@Regional,@Zonal,5,@LError
> >     */
> >     RETURN case when @EMail='' then @Manager else @EMail  end
> > END
> >
> > Espero ansioso!!!!!  :))
> >
> > Daniel Calvin
> >
> > El día 6/07/07, Maxi Accotto < [EMAIL PROTECTED] > escribió:
> > > Daniel, a ver, no te recomiendo SP extendidos ni a ganchos, veamos de
> > > resolverlo de otra manera.
> > >
> > > No me queda claro porque queres hacer funciones con insert y update y
> > > que estas haciendo realmente en el proceso, podrias poner un poco de
> > > codigo o bien contarme pasos mas detallados para poderte entender
> > > mejor y buscar una solucion :)
> > >
> > >
> >
-----------------------------------------------------------
> > > Microsoft MVP en SQL Server
> > > Mentor asociado en SQLTotalConsulting
> > > (excelencia en servicios y consultoria  SQLServer)
> > > Orador Culminis - Microsoft Influencier
> > > www.sqltotalconsulting.com
> > >
> >
-----------------------------------------------------------
> > >
> > >
> > > El 6/07/07, Daniel Calvin < [EMAIL PROTECTED]> escribió:
> > >
> > > > Hola Gente
> > > >
> > > > Tengo andando un bicho medio raro que me permite obtener data desde
un
> > Web
> > > > Service, estoy en MSSQL2000, y retornar esa info mediante vistas
como
> > alguna
> > > > columna mas en el conjunto de resultados.
> > > >
> > > > Hasta aqui todo bien funciona bien, pero es lento ( cosa que sabia
de
> > > > antemano ), entonces me dije armo un mecanismo de cache para los
datos y
> > > > listop.
> > > >
> > > > Arme las tablitas, una cantidad de funciones, etc, etc y quedo todo
> > andando,
> > > > todo menos el update y el insert en el cache. Eso lo deje para lo
> > ultimo,
> > > > despues de todo que complejidad puede tener un Update o un
insert?....
> > :((
> > > >
> > > > Bue, la dificultad aparecio, desde una función no se puede invocar
un
> > update
> > > > o un insert, simplemente esta prohibido.  :))
> > > > Probe entonces invocar un store procedure, la funcion en este caso
se
> > crea,
> > > > el problema es al invocarla desde una vista, ahi el sr mssql me tira
un
> > > > error que me dice noooo!!!!, mi hijo si quiere invocar un stare
> > procedure
> > > > que sea un store procedure extendido, si no, MINGA!!!!!
> > > >
> > > > Tonces ahora estoy por escribir mi store extendido, luego de pasarle
el
> > > > plumero al compilador de c..., pero antes de ponerme a luchar con
los
> > > > punteros, las invocaciones a DBLibrary y otras yerbas, me surgio una
> > > > duda....
> > > > Tendre algún problema si invoco desde una función un store extendido
que
> > > > haga Update o Insert????, pregunto por si han hecho la experiencia,
> > segun la
> > > > doc no voy a tener problemas en invocar el store extendido, tengo
miedo
> > que
> > > > pese a eso no me deje insertar o updatear. La tabla que tengo que
> > updatear
> > > > esta siendo consultada dentro de una función que invocaría al store
> > > > extendido.
> > > >
> > > > Bueno, espero vuestra ayuda, gracias.
> > > >
> > > > Daniel Calvin
> > > >
> > > >
> > > >
> > > > --
> > > > Daniel A. Calvin
> > > > Cooperator Team Member
> > > > http://www.cooperator.com.ar
> > > > Microsoft Certified Professional
> > >
> > >
> > > --
> > >
> > >
> >
> >
> >
> > --
> > Daniel A. Calvin
> > Cooperator Team Member
> > http://www.cooperator.com.ar
> > Microsoft Certified Professional
>
>
> --
>
-----------------------------------------------------------
> Microsoft MVP en SQL Server
> Mentor asociado en SQLTotalConsulting
> (excelencia en servicios y consultoria  SQLServer)
> Orador Culminis - Microsoft Influencier
> www.sqltotalconsulting.com
>
-----------------------------------------------------------
>
>



--

Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Responder a