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