SlideShare una empresa de Scribd logo
1 de 42
Conferencia
Visual FoxPro
España 2003
Diseñando Funciones
definidas por usuario
eficientes en SQL-Server 2000
Fernando G. Guerrero - Solid Quality Learning
Miguel Egea – PortalSQL.COM
Conferencia Visual FoxPro España 2003 PortalFox.com
Información Breve sobre Fernando
(2 milisegundos)
 MCSD, MCSE+Internet (W2K), MCDBA, MCT, SQL
Server MVP
 Articulista de SQL-Server Magazine y SQL-Server
Profesional.
 Mi web-sites http://www.callsql.com y
http://www.solidqualitylearning.com
 Mi libro. Escrito junto a Carlos E. Rojas
 Principal Mentor en Solid Quality Learning
Conferencia Visual FoxPro España 2003 PortalFox.com
Información Breve sobre Miguel
(1 milisegundo)
 SQL Server MVP
 Articulista en MSDN
 Webmaster de http://www.portalsql.com
 El libro que más me gusta
Conferencia Visual FoxPro España 2003 PortalFox.com
¿Que debe esperar de las UDF’s?
 Las UDFs son flexibles, eficientes, versátiles,
pero …no están demasiado bien documentadas.
 Debe conocer cuando y como usarlas.
 La siguiente versión de Sql-Server deberá
extender enormemente la funcionalidad de las
UDF’s, así que debe empezar con ellas a.s.a.p.
 Obtendrá beneficios conociendo que pasa en los
escenarios que las use (espera a ver algunas
trazas de Profiler)
 Quisiéramos enseñaros un montón de ejemplos y
un montón más On-Line
Conferencia Visual FoxPro España 2003 PortalFox.com
¿Que debería aprender en esta sesión?
 Por qué las UDFs son una funcionalidad
importante en la programación
 Como crear UDFs:
 Definidas por el usuario
 UDFs del sistema
 Como ejecuta SQL-Server las UDF’s
 Como convertir vistas y procedimientos
almacenados en UDF’s
 Como usar algunas funciones indocumentadas
del sistema
 Como querer a las UDF’s un poquito más cada
dia 
Conferencia Visual FoxPro España 2003 PortalFox.com
Agenda
 Introducción a las funciones definidas por el
usuario (UDF)
 UDF Ventajas y limitaciones
 Comentarios sobre funciones no deterministas
 Añadiendo funcionalidad A T-SQL con UDF
escalares
 Redefiniendo vistas como UDF de tabla en línea.
 Convirtiendo procedimientos almacenados en
Funciones de valores de tabla de múltiples
instrucciones
 UDFs en las definiciones de integridad
Referencial.
Conferencia Visual FoxPro España 2003 PortalFox.com
Introducción a las UDF’s
 Tipos:
 Funciones Escalares
 De tabla de valores en línea
 De tabla de valores de múltiples instrucciones.
 Proporcionadas por el sistema
 Oficialmente soportadas.
 Algunas funciones más (útiles)
 Usando plantillas del Analizador de Consultas
para crear UDFS
 Usando el Analizador para detectar el uso de
funciones
Conferencia Visual FoxPro España 2003 PortalFox.com
Ventajas de las UDF’s 
 Pueden generalmente ser usadas en cualquier
lugar de una consulta
 Extienden la funcionalidad de T-SQL.
 Son compiladas, como los procedimientos
almacenados, ¡Ejecución más rápida!
 La creación y el uso son similares a los
procedimientos almacenados.
Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones de las UDF’s 
 Algunas funciones no deterministas no están
permitidas dentro de UDF’s.
 Devuelven un solo valor.
 No pueden modificar datos ….. directamente.
 Comparten los 32 niveles de recursión con
triggers y procedimientos almacenados.
Conferencia Visual FoxPro España 2003 PortalFox.com
Máximo 32 niveles de llamada
SQL Transaction
1: Stored Procedure
2: Stored Procedure
3: Trigger 30: Trigger
29: Stored Procedure
31: Trigger
32: Stored Procedure
33: ¿ahora una UDF ?








Conferencia Visual FoxPro España 2003 PortalFox.com
Ilimitado, sin llamadas recursivas
SQL Transaction
1: Stored Procedure
2: Stored Procedure
3: Trigger
30: Trigger
29: Stored Procedure
31: Trigger
32: Stored Procedure
33: Ahora una UDF







Conferencia Visual FoxPro España 2003 PortalFox.com
Funciones no deterministas, que no
pueden usarse dentro de UDF’s (I)
 Funciones no deterministas, no permitidas en UDFs:
 CURRENT_TIMESTAMP, GETDATE,
GetUTCDate, @@DBTS
 IDENTITY, NEWID
 TEXTPTR
 @@MAX_CONNECTIONS
 Ninguna de las funciones estadísticas del sistema
están permitidas
 Todas las otras funciones del sistema están
permitidas menos… veamos la siguiente diapositiva.
Conferencia Visual FoxPro España 2003 PortalFox.com
Funciones no deterministas, que no
pueden usarse dentro de UDF’s (II)
 CAST es determinista excepto convirtiendo
fechas.
 Convert es determinista, excepto convirtiendo
fechas sin un estilo de conversión implícito.
 CHECKSUM es determinista, excepto
CHECKSUM(*)
 IsDate es no determinista, en su lugar use
Convert con un estilo como 0,100,9 o 109.
 RAND es no determinista excepto que se
especifique un valor de semilla.
Conferencia Visual FoxPro España 2003 PortalFox.com
¿Cuándo es una UDF Determinista?
 Todas las funciones, propias o definidas por el
usuario referenciadas son deterministas.
 La función se ha definido con WITH
SCHEMABINDING
 No ejecuta procedimientos almacenados
extendidos.
 No hay que olvidar que según BOL puedes usar
funciones nativas SQL dentro de una UDF
Conferencia Visual FoxPro España 2003 PortalFox.com
Extender la funcionalidad T-SQL con
UDF’s
 Las funciones escalares son exactamente
funciones.
 Las puedes usar en cualquier lugar que SQL
espere una expresión
 Las UDF’s son funciones multi-comando similares
a los procedimientos almacenados.
 Las UDF’s aceptan parámetros de entrada (Hasta
2100 pese a que los BOL dicen 1024).
 Las UDF’s no usan parámetros tipo OUPUT.
 Las UDF’s devuelven cualquier valor (excepto
BLOB’s)
Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo de función escalar FV
(Valor Futuro)
CREATE FUNCTION dbo.fn_FV
(@rate float, @nper int, @pmt money,
@pv money = 0.0, @type bit = 0)
RETURNS money
AS BEGIN
DECLARE @fv money
IF @rate = 0 SET @fv = @pv + @pmt * @nper
ELSE SET @fv = @pv * POWER(1 + @rate,
@nper) + @pmt *
(((POWER(1 + @rate, @nper + @type) -
1) / @rate) – @type)
RETURN (-@fv)
END
Conferencia Visual FoxPro España 2003 PortalFox.com
UDF’s escalares indocumentadas
 ¿Dónde encontrarlas?
 $SQLInstallDir$InstallReplsys.sql
 $SQLInstallDir$InstallProcsyst.sql
 Algunos ejemplos de uso
 fn_chariswhitespace
 fn_replquotename
 fn_replmakestringliteral
 fn_mssharedversion
 Hay muchas definidas para el uso interno de la
replicación. No he encontrado un uso práctico de
ellas, pero su estructura es muy interesante.
Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y algunos trucos para
UDF’s escalares
 Como obtener números aleatorios de una UDF.
 Como usar fechas en una UDF.
 Recursividad en una UDF escalar.
 Como modificar datos dentro de una UDF.
VEAMOS TODO ESTO MÁS EN DETALLE
Conferencia Visual FoxPro España 2003 PortalFox.com
Como obtener valores aleatorios en
una UDF
 RAND no está permitido en una UDF.
 Podemos tomar información de hora de
sysprocesses (last_batch).
 Solo es significativo para conexiones de usuarios.
 Podemos usar cuando se lanzan procesos del
sistema (como el LAZY WRITER).
 No es excesivamente buen enfoque.
 Se puede completar todo esto con funciones
trigonométricas como PI
 Se puede usar OPENQUERY para hacer una
‘auto’ llamada y estará todo permitido….
INCLUSO RAND
Conferencia Visual FoxPro España 2003 PortalFox.com
Como usar Fechas en UDF’s
 Las funciones relacionadas con fechas no están
permitidas en las UDF’s.
 Podemos usar la información de la hora desde
sysprocesses como antes, pero no es una
información segura.
 También podemos usar OPENQUERY u
OPENROWSET para llamar a Sql. Entonces todo
está permitido, incluso GETDATE
 ¿Por qué no se permiten las funciones de fecha
dentro de las UDF’s.
 Quizá alguien de MS las odie.. 
Conferencia Visual FoxPro España 2003 PortalFox.com
Recursividad en las UDF’s
 Nada nos impide usarla ….. Pero deberíamos
intentar otra via.
 Está limitada a 32 niveles de recursión.
 Puede ser usada para navegar en árboles
binarios.
 Son una alternativa válida a procedimientos
almacenados recursivos que devuelven datos.
 Ejemplo : El árbol de empleados
Conferencia Visual FoxPro España 2003 PortalFox.com
¿Cómo modificar datos desde una
UDF?
 No se puede …… por definición.
 Pero si puedes usar objetos ADO desde VB o
Foxpro para conectar a SQL-SERVER y modificar
datos…..
 Podrás usar lo mismo desde las UDF’s mediante
los procedimientos sp_OAxxx .
 Sin embargo si no es imprescindible yo usaría
siempre procedimientos almacenados para
modificar datos.
 Pero es posible… Veámos un ejemplo.
Conferencia Visual FoxPro España 2003 PortalFox.com
¿Insertar datos con OPENQUERY?
 OPENQUERY está diseñado para devolver datos
de cualquier proveedor OLE-DB.
 Pero actualmente ejecuta secuencias de
instrucciones.
 Veamos que hace…
Conferencia Visual FoxPro España 2003 PortalFox.com
Usos avanzados de UDF’s escalares
 Usar variable de tipo tabla en UDF’s (Listado 6)
 Usar y devolver XML (Listado 7)
 Consideraciones de rendimiento.
 Trazando UDF’s escalares con profiler
(analizador).
Conferencia Visual FoxPro España 2003 PortalFox.com
Redefiniendo vistas como UDF’s de
tabla en línea
 Son como las vistas….casi.
 Trabajan como las vistas.
 Tienen las mismas limitaciones que las vistas… y
unas pocas más.
 Pero : ¡Aceptan parámetros de entrada!
Conferencia Visual FoxPro España 2003 PortalFox.com
Redefiniendo vistas como UDF’s de
tabla en línea (continuación)
 Sin embargo:
 Deben ser definidas como un solo comando
SELECT.
 Nunca son ‘ejecutadas’.
 Son insensibles a cambios de estructura.
 PERO: no pueden tener índices y no puedes
declarar triggers sobre ellas.
Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo de UDF’s de tabla en línea.
-- Devuelve los pedidos de un día determinado
CREATE FUNCTION dbo.GetOrdersFromDay
(@date as smalldatetime)
RETURNS TABLE
AS
RETURN (SELECT *
FROM Orders
WHERE DATEDIFF(day, OrderDate, @date) = 0)
GO
SELECT *
FROM dbo.GetOrdersFromDay('2002-09-14')
Conferencia Visual FoxPro España 2003 PortalFox.com
UDF de tabla en línea documentada.
 ::fn_trace_gettable(@filename,
@numfiles)
 Devuelve información de traza en formato tabla.
 @filename es el directorio físico de la traza
 @numfiles es el número de renovación (default son
todos)
SELECT *
FROM ::fn_trace_gettable(
'c:my_trace.trc',
default)
Conferencia Visual FoxPro España 2003 PortalFox.com
Y una UDF del sistema no
documentada
 ::fn_dblog(@start, @end)
 Lee el log de transacciones
 @start es el Log Sequence Number (LSN)
 @end es el último LSN
 Se usa (null,null) para leerlo todo
 Se cuidadoso con el formato de @start y @end
SELECT TOP 10
[Current LSN], Operation
FROM ::fn_dblog(NULL, NULL)
ORDER BY [Current LSN] DESC
Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y algunos trucos en las
UDF’s de tabla en línea.
 Usar ORDER BY dentro de una UDF (Listado 8)
 Joins entre UDF’s con otras UDF’s y otras tablas.
(listado 9)
 Modificar datos desde una UDF (Listado 10)
 ¿Cómo usa SQL-SERVER estas funciones?
 Intentar detectarlas en el analizador (profiler)
 Intentar detectarlas en el plan de ejecución.
Conferencia Visual FoxPro España 2003 PortalFox.com
Convirtiendo SP’s en UDF’s
multicomando.
 Las UDF’s multicomando
 Son como los procedimientos almacenados.. casi.
 Están compilados como los procedimientos
almacenados.
 Tienen las mismas limitaciones que los
procedimientos almacenados.
 Pero.. Pueden ser usadas en la cláusula FROM
de cualquier secuencia de comandos.
Conferencia Visual FoxPro España 2003 PortalFox.com
Convertir SP’s en UDF’s
multicomando (continuación)
 ¿Por qué $#%£! debería convertir mis
procedimientos almacenados?
 Es muy fácil convertir procedimientos
almacenados en funciones.
 Son tan rápidas como los procedimientos
almacenados.
 Aunque, no pueden usar parámetros de salida
(OUTPUT)
 Aunque, no pueden modificar datos …
directamente.
Esto es por lo que LAS QUIERO 
Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplos de creación de UDFs
multicomando.
CREATE FUNCTION dbo.tv_GetOrdersFromDay
(@date as smalldatetime)
RETURNS @list TABLE (OrderID int, OrderDate
datetime)
AS
BEGIN
INSERT @List
SELECT OrderID, OrderDate
FROM Orders
WHERE DATEDIFF(day, OrderDate, @date) = 0
RETURN
END
Conferencia Visual FoxPro España 2003 PortalFox.com
Algunas UDF’s multicomando más
complejas.
 MakeList(@ParamArray, @Separator)
 Convierte una cadena de strings en una
tabla con un solo campo con cada item
separado por @separator en una fila.
(Listado 11)
 OrderDetailsComplete(@ID, @Key)
 Muestra un listado de pedidos con información
completa y descriptiva, con cada primary key para
unir con otras tablas( Listado 12)
 La lista se producirá para cada :
 Order (@Key = 'ORD') Product (@Key = 'PRO')
 Customer (@Key = 'CUS') Category (@Key = 'CAT')
 Full List (@Key NOT IN ('ORD', 'PRO', 'CUS', 'CAT'))
Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y trucos con las
UDF’s multicomando
 Solo puedes devolver un conjunto de resultados
 Uniendo UDF’s de tabla en línea, con UDF’s
multicomando u otras Tablas.
 No puedes modificar los datos dentro de una
UDF… directamente.
 ¿Cómo usa SQL-SERVER estas funciones?
 Intentar detectarlas en el analizador (profiler)
 Intentar detectarlas en el plan de ejecución.
Conferencia Visual FoxPro España 2003 PortalFox.com
Creando UDF’s del sistema
 Deben ser creadas en master.
 SQL-SERVER debe estar configurado para
permitir actualizaciones en las tablas del sistema.
 El propietario debe ser system_function_schema
 Y ya está!!!
 Son muy útiles para convertir procedimientos
almacenados del sistema en UDF’s
 Si quieres usar esos procedimientos almacenados
en cláusulas FROM
 Y el procedimiento almacenado tiene un código
válido para una UDF.
Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo. Convirtiendo sp_lock en
fn_lock.
 Fn_lock te puede proporcionar más funcionalidad
que sp_lock:
 Buscando procesos bloqueados.
 Buscando bloqueos que afectan a algunos
objetos.
 Mostrando los bloqueos que afecta a una
conexión.
 Mostrando bloqueos que afectan al mismo
recurso.
 Mira el código.
 Por ejemplo :
SELECT *
FROM ::fn_lock()
WHERE Status = 'WAIT‘
Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo: Obteniendo información de
grupos y usuarios de Windows
 fn_getntgroupmembers te informa de los
miembros de un grupo de usuarios de windows
 gn_getntgroups Te informa de los grupos a los
que pertenece un usuario.
 Veamos el código:
 Por ejemplo:
SELECT *
FROM
::fn_getntgroups(‘MyDomainMyUse
r')
Conferencia Visual FoxPro España 2003 PortalFox.com
Las UDF’s en las restricciones
 Usar UDFs escalares en definiciones DEFAULT
 Usar UDFs escalares en restricciones CHECK
 Usar UDFs escalares en campos PRIMARY KEY
 Usar UDFs escalares en columnas calculadas
 “UDFs Provide a New Identity” (SQL Server
Magazine, March 2001):
 http://www.sqlmag.com/Articles/Index.cfm?Arti
cleID=16354
 Mira el código.
ALTER TABLE IDTest
ADD CONSTRAINT def_IDTest
DEFAULT (dbo.fn_GetNewID(OBJECT_ID('IDTest'))) FOR
ID
Conferencia Visual FoxPro España 2003 PortalFox.com
Recursos y referencias
 Microsoft SQL Server 2000 by Example:
http://www.SqlServerByExample.com
 SQL Server Magazine: http://www.sqlmag.com
 Professional Association of SQL Server:
http://www.sqlpass.org
 Newsgroups: news://msnews.microsoft.com
 Swynk: http://www.swynk.com
 CallSQL: http://www.callsql.com
 www.SolidQualityLearning.com
 PortalSQL.COM : http://www.portalsql.com
 Microsoft SQL Server site:
http://www.microsoft.com/sql
Conferencia Visual FoxPro España 2003 PortalFox.com
Gracias!!!!!!!!!!!!!
 ¿Preguntas?
 Contacte con nosotros en
fernan@solidqualitylearning.com y
webmaster@portalsql.com
Conferencia Visual FoxPro España 2003 PortalFox.com
¡Gracias!
Acuérdese de rellenar la hoja de evaluación

Más contenido relacionado

La actualidad más candente

Manual del programador_vfp6
Manual del programador_vfp6Manual del programador_vfp6
Manual del programador_vfp6piuraeylole06
 
Introducion A Fox Pro
Introducion A Fox ProIntroducion A Fox Pro
Introducion A Fox Proguest03398b
 
Guia visual fox pro 1
Guia visual fox pro 1Guia visual fox pro 1
Guia visual fox pro 1Leotom
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Introducción al Delphi
Introducción al DelphiIntroducción al Delphi
Introducción al DelphiJimmy Campo
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)Ander Martinez
 
Programacinenshell linux
Programacinenshell linuxProgramacinenshell linux
Programacinenshell linuxusupr2014
 
Visual basic
Visual basicVisual basic
Visual basicaaroyo125
 
UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0Ander Martinez
 
Manual oracle forms 6i
Manual oracle forms 6iManual oracle forms 6i
Manual oracle forms 6iUMSA
 
Elementos Básicos en Delphi 7
Elementos Básicos en Delphi 7Elementos Básicos en Delphi 7
Elementos Básicos en Delphi 7luis_ipb
 
Tutorial netbeans
Tutorial netbeansTutorial netbeans
Tutorial netbeansMarthaa Hdz
 

La actualidad más candente (20)

Visual fox-pro para clases
Visual fox-pro para clasesVisual fox-pro para clases
Visual fox-pro para clases
 
Manual del programador_vfp6
Manual del programador_vfp6Manual del programador_vfp6
Manual del programador_vfp6
 
Introducion A Fox Pro
Introducion A Fox ProIntroducion A Fox Pro
Introducion A Fox Pro
 
Manual visual fox pro
Manual visual fox proManual visual fox pro
Manual visual fox pro
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Manual visualfoxpro6
Manual visualfoxpro6Manual visualfoxpro6
Manual visualfoxpro6
 
Formularios En Visual Fox Pro
Formularios En Visual Fox ProFormularios En Visual Fox Pro
Formularios En Visual Fox Pro
 
Guia visual fox pro 1
Guia visual fox pro 1Guia visual fox pro 1
Guia visual fox pro 1
 
Visual basic 6
Visual basic 6Visual basic 6
Visual basic 6
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Introducción al Delphi
Introducción al DelphiIntroducción al Delphi
Introducción al Delphi
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
 
Programacinenshell linux
Programacinenshell linuxProgramacinenshell linux
Programacinenshell linux
 
Tutorial de codeblocks
Tutorial de codeblocksTutorial de codeblocks
Tutorial de codeblocks
 
Curso de delphi
Curso de delphiCurso de delphi
Curso de delphi
 
Visual basic
Visual basicVisual basic
Visual basic
 
UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0
 
Manual oracle forms 6i
Manual oracle forms 6iManual oracle forms 6i
Manual oracle forms 6i
 
Elementos Básicos en Delphi 7
Elementos Básicos en Delphi 7Elementos Básicos en Delphi 7
Elementos Básicos en Delphi 7
 
Tutorial netbeans
Tutorial netbeansTutorial netbeans
Tutorial netbeans
 

Destacado

Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005hmosquera
 
Comandos de configuracion vfp
Comandos de configuracion vfpComandos de configuracion vfp
Comandos de configuracion vfphmosquera
 
tutorial de Viual Fox pro 6.0 para hacer una tabla
tutorial de Viual Fox pro 6.0 para hacer una tablatutorial de Viual Fox pro 6.0 para hacer una tabla
tutorial de Viual Fox pro 6.0 para hacer una tablaDrums2b
 
Habilitar la Autenticación SQL y crear un nuevo usuario SQL
Habilitar la Autenticación SQL y crear un nuevo usuario SQLHabilitar la Autenticación SQL y crear un nuevo usuario SQL
Habilitar la Autenticación SQL y crear un nuevo usuario SQLnarkamo3
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 

Destacado (10)

formularios en Visual Foxpro
formularios en Visual Foxproformularios en Visual Foxpro
formularios en Visual Foxpro
 
Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005
 
Manual de practicas
Manual de practicasManual de practicas
Manual de practicas
 
Comandos de configuracion vfp
Comandos de configuracion vfpComandos de configuracion vfp
Comandos de configuracion vfp
 
objetos y propiedades de vfp
objetos y propiedades de vfpobjetos y propiedades de vfp
objetos y propiedades de vfp
 
Visual fox pro
Visual fox pro Visual fox pro
Visual fox pro
 
tutorial de Viual Fox pro 6.0 para hacer una tabla
tutorial de Viual Fox pro 6.0 para hacer una tablatutorial de Viual Fox pro 6.0 para hacer una tabla
tutorial de Viual Fox pro 6.0 para hacer una tabla
 
visual fox pro
visual fox provisual fox pro
visual fox pro
 
Habilitar la Autenticación SQL y crear un nuevo usuario SQL
Habilitar la Autenticación SQL y crear un nuevo usuario SQLHabilitar la Autenticación SQL y crear un nuevo usuario SQL
Habilitar la Autenticación SQL y crear un nuevo usuario SQL
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 

Similar a Udf eficientes

[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockitoJose Barba Martinez
 
Mi lenguaje preferido- SQL
Mi lenguaje preferido- SQLMi lenguaje preferido- SQL
Mi lenguaje preferido- SQLFranshezka
 
Clase de investigacion presentacion 1
Clase de investigacion presentacion 1Clase de investigacion presentacion 1
Clase de investigacion presentacion 1Bryan Matos
 
Base de Datos Grupo Los Informaticos
Base de Datos Grupo Los InformaticosBase de Datos Grupo Los Informaticos
Base de Datos Grupo Los InformaticosPedroJunior178
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusXavier Espinoza
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Antonio Ortiz
 
Comparación entre microsoft sql server express edition 2012 y oracle
Comparación entre microsoft sql server express edition 2012 y oracleComparación entre microsoft sql server express edition 2012 y oracle
Comparación entre microsoft sql server express edition 2012 y oracleOsmar Zaragoza
 
Bases de datos por jesus j felix rodriguez lopez
Bases de datos por jesus j felix rodriguez lopezBases de datos por jesus j felix rodriguez lopez
Bases de datos por jesus j felix rodriguez lopezJesus Rodriguez
 
Versiones Microsoft SQL
Versiones Microsoft SQLVersiones Microsoft SQL
Versiones Microsoft SQLLuis Vázquez
 
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sqlF004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sqlMiguel Amgo
 
Cuadro Comparativo
Cuadro ComparativoCuadro Comparativo
Cuadro ComparativoMartha
 
Presentación1 bases de datos
Presentación1 bases de datosPresentación1 bases de datos
Presentación1 bases de datosAurora Fuentes
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 

Similar a Udf eficientes (20)

Base de datos
Base de datosBase de datos
Base de datos
 
Db2
Db2Db2
Db2
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
 
[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito
 
Mi lenguaje preferido- SQL
Mi lenguaje preferido- SQLMi lenguaje preferido- SQL
Mi lenguaje preferido- SQL
 
Clase de investigacion presentacion 1
Clase de investigacion presentacion 1Clase de investigacion presentacion 1
Clase de investigacion presentacion 1
 
Base de Datos Grupo Los Informaticos
Base de Datos Grupo Los InformaticosBase de Datos Grupo Los Informaticos
Base de Datos Grupo Los Informaticos
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
 
Comparación entre microsoft sql server express edition 2012 y oracle
Comparación entre microsoft sql server express edition 2012 y oracleComparación entre microsoft sql server express edition 2012 y oracle
Comparación entre microsoft sql server express edition 2012 y oracle
 
Bases de datos por jesus j felix rodriguez lopez
Bases de datos por jesus j felix rodriguez lopezBases de datos por jesus j felix rodriguez lopez
Bases de datos por jesus j felix rodriguez lopez
 
Versiones Microsoft SQL
Versiones Microsoft SQLVersiones Microsoft SQL
Versiones Microsoft SQL
 
DB2
DB2DB2
DB2
 
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sqlF004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
 
Cuadro Comparativo
Cuadro ComparativoCuadro Comparativo
Cuadro Comparativo
 
SMBD 2011
SMBD 2011SMBD 2011
SMBD 2011
 
SMBD 2011
SMBD 2011SMBD 2011
SMBD 2011
 
Act4 screencast-bdatos cmch
Act4 screencast-bdatos cmchAct4 screencast-bdatos cmch
Act4 screencast-bdatos cmch
 
Presentación1 bases de datos
Presentación1 bases de datosPresentación1 bases de datos
Presentación1 bases de datos
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 

Más de Fernando G. Guerrero

Itinerarios de Grado de Ingenieria Informatica EPS Alicante
Itinerarios de Grado de Ingenieria Informatica EPS AlicanteItinerarios de Grado de Ingenieria Informatica EPS Alicante
Itinerarios de Grado de Ingenieria Informatica EPS AlicanteFernando G. Guerrero
 
New gTLDs between two rounds: trade mark challenges
 New gTLDs between two rounds: trade mark challenges New gTLDs between two rounds: trade mark challenges
New gTLDs between two rounds: trade mark challengesFernando G. Guerrero
 
Dealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETDealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETFernando G. Guerrero
 
Concurrency problems and locking techniques in SQL Server 2000 and VB.NET
Concurrency problems and locking techniques in SQL Server 2000 and VB.NETConcurrency problems and locking techniques in SQL Server 2000 and VB.NET
Concurrency problems and locking techniques in SQL Server 2000 and VB.NETFernando G. Guerrero
 
Achieve the Impossible: Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...
Achieve the Impossible:Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...Achieve the Impossible:Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...
Achieve the Impossible: Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...Fernando G. Guerrero
 
Dealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETDealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETFernando G. Guerrero
 
Datos Geométricos y Espaciales en SQL Server 2008
Datos Geométricos y Espaciales en SQL Server 2008Datos Geométricos y Espaciales en SQL Server 2008
Datos Geométricos y Espaciales en SQL Server 2008Fernando G. Guerrero
 
Microsoft Changed the Game Again and Gave New Wings to an Entire Industry
Microsoft Changed the Game Again and Gave New Wings to an Entire IndustryMicrosoft Changed the Game Again and Gave New Wings to an Entire Industry
Microsoft Changed the Game Again and Gave New Wings to an Entire IndustryFernando G. Guerrero
 
Making business sense of the continuous and anarchic flow of Social Media data
Making business sense of the continuous and anarchic flow of Social Media dataMaking business sense of the continuous and anarchic flow of Social Media data
Making business sense of the continuous and anarchic flow of Social Media dataFernando G. Guerrero
 
Designing Role-Based Database Systems to Achieve Unlimited Database Scalability
Designing Role-Based Database Systems to Achieve Unlimited Database ScalabilityDesigning Role-Based Database Systems to Achieve Unlimited Database Scalability
Designing Role-Based Database Systems to Achieve Unlimited Database ScalabilityFernando G. Guerrero
 
Data Mining for Moderation of Social Data
Data Mining for Moderation of Social DataData Mining for Moderation of Social Data
Data Mining for Moderation of Social DataFernando G. Guerrero
 
Solid q universidad empresa 2011 10 27
Solid q universidad empresa 2011 10 27Solid q universidad empresa 2011 10 27
Solid q universidad empresa 2011 10 27Fernando G. Guerrero
 

Más de Fernando G. Guerrero (13)

Itinerarios de Grado de Ingenieria Informatica EPS Alicante
Itinerarios de Grado de Ingenieria Informatica EPS AlicanteItinerarios de Grado de Ingenieria Informatica EPS Alicante
Itinerarios de Grado de Ingenieria Informatica EPS Alicante
 
New gTLDs between two rounds: trade mark challenges
 New gTLDs between two rounds: trade mark challenges New gTLDs between two rounds: trade mark challenges
New gTLDs between two rounds: trade mark challenges
 
Dealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETDealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NET
 
Concurrency problems and locking techniques in SQL Server 2000 and VB.NET
Concurrency problems and locking techniques in SQL Server 2000 and VB.NETConcurrency problems and locking techniques in SQL Server 2000 and VB.NET
Concurrency problems and locking techniques in SQL Server 2000 and VB.NET
 
Vda305 concurrency guerrero
Vda305 concurrency guerreroVda305 concurrency guerrero
Vda305 concurrency guerrero
 
Achieve the Impossible: Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...
Achieve the Impossible:Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...Achieve the Impossible:Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...
Achieve the Impossible: Use INSTEAD OF triggers in SQL Server 2000 to Deal Tr...
 
Dealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NETDealing with SQL Security from ADO.NET
Dealing with SQL Security from ADO.NET
 
Datos Geométricos y Espaciales en SQL Server 2008
Datos Geométricos y Espaciales en SQL Server 2008Datos Geométricos y Espaciales en SQL Server 2008
Datos Geométricos y Espaciales en SQL Server 2008
 
Microsoft Changed the Game Again and Gave New Wings to an Entire Industry
Microsoft Changed the Game Again and Gave New Wings to an Entire IndustryMicrosoft Changed the Game Again and Gave New Wings to an Entire Industry
Microsoft Changed the Game Again and Gave New Wings to an Entire Industry
 
Making business sense of the continuous and anarchic flow of Social Media data
Making business sense of the continuous and anarchic flow of Social Media dataMaking business sense of the continuous and anarchic flow of Social Media data
Making business sense of the continuous and anarchic flow of Social Media data
 
Designing Role-Based Database Systems to Achieve Unlimited Database Scalability
Designing Role-Based Database Systems to Achieve Unlimited Database ScalabilityDesigning Role-Based Database Systems to Achieve Unlimited Database Scalability
Designing Role-Based Database Systems to Achieve Unlimited Database Scalability
 
Data Mining for Moderation of Social Data
Data Mining for Moderation of Social DataData Mining for Moderation of Social Data
Data Mining for Moderation of Social Data
 
Solid q universidad empresa 2011 10 27
Solid q universidad empresa 2011 10 27Solid q universidad empresa 2011 10 27
Solid q universidad empresa 2011 10 27
 

Udf eficientes

  • 1. Conferencia Visual FoxPro España 2003 Diseñando Funciones definidas por usuario eficientes en SQL-Server 2000 Fernando G. Guerrero - Solid Quality Learning Miguel Egea – PortalSQL.COM
  • 2. Conferencia Visual FoxPro España 2003 PortalFox.com Información Breve sobre Fernando (2 milisegundos)  MCSD, MCSE+Internet (W2K), MCDBA, MCT, SQL Server MVP  Articulista de SQL-Server Magazine y SQL-Server Profesional.  Mi web-sites http://www.callsql.com y http://www.solidqualitylearning.com  Mi libro. Escrito junto a Carlos E. Rojas  Principal Mentor en Solid Quality Learning
  • 3. Conferencia Visual FoxPro España 2003 PortalFox.com Información Breve sobre Miguel (1 milisegundo)  SQL Server MVP  Articulista en MSDN  Webmaster de http://www.portalsql.com  El libro que más me gusta
  • 4. Conferencia Visual FoxPro España 2003 PortalFox.com ¿Que debe esperar de las UDF’s?  Las UDFs son flexibles, eficientes, versátiles, pero …no están demasiado bien documentadas.  Debe conocer cuando y como usarlas.  La siguiente versión de Sql-Server deberá extender enormemente la funcionalidad de las UDF’s, así que debe empezar con ellas a.s.a.p.  Obtendrá beneficios conociendo que pasa en los escenarios que las use (espera a ver algunas trazas de Profiler)  Quisiéramos enseñaros un montón de ejemplos y un montón más On-Line
  • 5. Conferencia Visual FoxPro España 2003 PortalFox.com ¿Que debería aprender en esta sesión?  Por qué las UDFs son una funcionalidad importante en la programación  Como crear UDFs:  Definidas por el usuario  UDFs del sistema  Como ejecuta SQL-Server las UDF’s  Como convertir vistas y procedimientos almacenados en UDF’s  Como usar algunas funciones indocumentadas del sistema  Como querer a las UDF’s un poquito más cada dia 
  • 6. Conferencia Visual FoxPro España 2003 PortalFox.com Agenda  Introducción a las funciones definidas por el usuario (UDF)  UDF Ventajas y limitaciones  Comentarios sobre funciones no deterministas  Añadiendo funcionalidad A T-SQL con UDF escalares  Redefiniendo vistas como UDF de tabla en línea.  Convirtiendo procedimientos almacenados en Funciones de valores de tabla de múltiples instrucciones  UDFs en las definiciones de integridad Referencial.
  • 7. Conferencia Visual FoxPro España 2003 PortalFox.com Introducción a las UDF’s  Tipos:  Funciones Escalares  De tabla de valores en línea  De tabla de valores de múltiples instrucciones.  Proporcionadas por el sistema  Oficialmente soportadas.  Algunas funciones más (útiles)  Usando plantillas del Analizador de Consultas para crear UDFS  Usando el Analizador para detectar el uso de funciones
  • 8. Conferencia Visual FoxPro España 2003 PortalFox.com Ventajas de las UDF’s   Pueden generalmente ser usadas en cualquier lugar de una consulta  Extienden la funcionalidad de T-SQL.  Son compiladas, como los procedimientos almacenados, ¡Ejecución más rápida!  La creación y el uso son similares a los procedimientos almacenados.
  • 9. Conferencia Visual FoxPro España 2003 PortalFox.com Limitaciones de las UDF’s   Algunas funciones no deterministas no están permitidas dentro de UDF’s.  Devuelven un solo valor.  No pueden modificar datos ….. directamente.  Comparten los 32 niveles de recursión con triggers y procedimientos almacenados.
  • 10. Conferencia Visual FoxPro España 2003 PortalFox.com Máximo 32 niveles de llamada SQL Transaction 1: Stored Procedure 2: Stored Procedure 3: Trigger 30: Trigger 29: Stored Procedure 31: Trigger 32: Stored Procedure 33: ¿ahora una UDF ?        
  • 11. Conferencia Visual FoxPro España 2003 PortalFox.com Ilimitado, sin llamadas recursivas SQL Transaction 1: Stored Procedure 2: Stored Procedure 3: Trigger 30: Trigger 29: Stored Procedure 31: Trigger 32: Stored Procedure 33: Ahora una UDF       
  • 12. Conferencia Visual FoxPro España 2003 PortalFox.com Funciones no deterministas, que no pueden usarse dentro de UDF’s (I)  Funciones no deterministas, no permitidas en UDFs:  CURRENT_TIMESTAMP, GETDATE, GetUTCDate, @@DBTS  IDENTITY, NEWID  TEXTPTR  @@MAX_CONNECTIONS  Ninguna de las funciones estadísticas del sistema están permitidas  Todas las otras funciones del sistema están permitidas menos… veamos la siguiente diapositiva.
  • 13. Conferencia Visual FoxPro España 2003 PortalFox.com Funciones no deterministas, que no pueden usarse dentro de UDF’s (II)  CAST es determinista excepto convirtiendo fechas.  Convert es determinista, excepto convirtiendo fechas sin un estilo de conversión implícito.  CHECKSUM es determinista, excepto CHECKSUM(*)  IsDate es no determinista, en su lugar use Convert con un estilo como 0,100,9 o 109.  RAND es no determinista excepto que se especifique un valor de semilla.
  • 14. Conferencia Visual FoxPro España 2003 PortalFox.com ¿Cuándo es una UDF Determinista?  Todas las funciones, propias o definidas por el usuario referenciadas son deterministas.  La función se ha definido con WITH SCHEMABINDING  No ejecuta procedimientos almacenados extendidos.  No hay que olvidar que según BOL puedes usar funciones nativas SQL dentro de una UDF
  • 15. Conferencia Visual FoxPro España 2003 PortalFox.com Extender la funcionalidad T-SQL con UDF’s  Las funciones escalares son exactamente funciones.  Las puedes usar en cualquier lugar que SQL espere una expresión  Las UDF’s son funciones multi-comando similares a los procedimientos almacenados.  Las UDF’s aceptan parámetros de entrada (Hasta 2100 pese a que los BOL dicen 1024).  Las UDF’s no usan parámetros tipo OUPUT.  Las UDF’s devuelven cualquier valor (excepto BLOB’s)
  • 16. Conferencia Visual FoxPro España 2003 PortalFox.com Ejemplo de función escalar FV (Valor Futuro) CREATE FUNCTION dbo.fn_FV (@rate float, @nper int, @pmt money, @pv money = 0.0, @type bit = 0) RETURNS money AS BEGIN DECLARE @fv money IF @rate = 0 SET @fv = @pv + @pmt * @nper ELSE SET @fv = @pv * POWER(1 + @rate, @nper) + @pmt * (((POWER(1 + @rate, @nper + @type) - 1) / @rate) – @type) RETURN (-@fv) END
  • 17. Conferencia Visual FoxPro España 2003 PortalFox.com UDF’s escalares indocumentadas  ¿Dónde encontrarlas?  $SQLInstallDir$InstallReplsys.sql  $SQLInstallDir$InstallProcsyst.sql  Algunos ejemplos de uso  fn_chariswhitespace  fn_replquotename  fn_replmakestringliteral  fn_mssharedversion  Hay muchas definidas para el uso interno de la replicación. No he encontrado un uso práctico de ellas, pero su estructura es muy interesante.
  • 18. Conferencia Visual FoxPro España 2003 PortalFox.com Limitaciones y algunos trucos para UDF’s escalares  Como obtener números aleatorios de una UDF.  Como usar fechas en una UDF.  Recursividad en una UDF escalar.  Como modificar datos dentro de una UDF. VEAMOS TODO ESTO MÁS EN DETALLE
  • 19. Conferencia Visual FoxPro España 2003 PortalFox.com Como obtener valores aleatorios en una UDF  RAND no está permitido en una UDF.  Podemos tomar información de hora de sysprocesses (last_batch).  Solo es significativo para conexiones de usuarios.  Podemos usar cuando se lanzan procesos del sistema (como el LAZY WRITER).  No es excesivamente buen enfoque.  Se puede completar todo esto con funciones trigonométricas como PI  Se puede usar OPENQUERY para hacer una ‘auto’ llamada y estará todo permitido…. INCLUSO RAND
  • 20. Conferencia Visual FoxPro España 2003 PortalFox.com Como usar Fechas en UDF’s  Las funciones relacionadas con fechas no están permitidas en las UDF’s.  Podemos usar la información de la hora desde sysprocesses como antes, pero no es una información segura.  También podemos usar OPENQUERY u OPENROWSET para llamar a Sql. Entonces todo está permitido, incluso GETDATE  ¿Por qué no se permiten las funciones de fecha dentro de las UDF’s.  Quizá alguien de MS las odie.. 
  • 21. Conferencia Visual FoxPro España 2003 PortalFox.com Recursividad en las UDF’s  Nada nos impide usarla ….. Pero deberíamos intentar otra via.  Está limitada a 32 niveles de recursión.  Puede ser usada para navegar en árboles binarios.  Son una alternativa válida a procedimientos almacenados recursivos que devuelven datos.  Ejemplo : El árbol de empleados
  • 22. Conferencia Visual FoxPro España 2003 PortalFox.com ¿Cómo modificar datos desde una UDF?  No se puede …… por definición.  Pero si puedes usar objetos ADO desde VB o Foxpro para conectar a SQL-SERVER y modificar datos…..  Podrás usar lo mismo desde las UDF’s mediante los procedimientos sp_OAxxx .  Sin embargo si no es imprescindible yo usaría siempre procedimientos almacenados para modificar datos.  Pero es posible… Veámos un ejemplo.
  • 23. Conferencia Visual FoxPro España 2003 PortalFox.com ¿Insertar datos con OPENQUERY?  OPENQUERY está diseñado para devolver datos de cualquier proveedor OLE-DB.  Pero actualmente ejecuta secuencias de instrucciones.  Veamos que hace…
  • 24. Conferencia Visual FoxPro España 2003 PortalFox.com Usos avanzados de UDF’s escalares  Usar variable de tipo tabla en UDF’s (Listado 6)  Usar y devolver XML (Listado 7)  Consideraciones de rendimiento.  Trazando UDF’s escalares con profiler (analizador).
  • 25. Conferencia Visual FoxPro España 2003 PortalFox.com Redefiniendo vistas como UDF’s de tabla en línea  Son como las vistas….casi.  Trabajan como las vistas.  Tienen las mismas limitaciones que las vistas… y unas pocas más.  Pero : ¡Aceptan parámetros de entrada!
  • 26. Conferencia Visual FoxPro España 2003 PortalFox.com Redefiniendo vistas como UDF’s de tabla en línea (continuación)  Sin embargo:  Deben ser definidas como un solo comando SELECT.  Nunca son ‘ejecutadas’.  Son insensibles a cambios de estructura.  PERO: no pueden tener índices y no puedes declarar triggers sobre ellas.
  • 27. Conferencia Visual FoxPro España 2003 PortalFox.com Ejemplo de UDF’s de tabla en línea. -- Devuelve los pedidos de un día determinado CREATE FUNCTION dbo.GetOrdersFromDay (@date as smalldatetime) RETURNS TABLE AS RETURN (SELECT * FROM Orders WHERE DATEDIFF(day, OrderDate, @date) = 0) GO SELECT * FROM dbo.GetOrdersFromDay('2002-09-14')
  • 28. Conferencia Visual FoxPro España 2003 PortalFox.com UDF de tabla en línea documentada.  ::fn_trace_gettable(@filename, @numfiles)  Devuelve información de traza en formato tabla.  @filename es el directorio físico de la traza  @numfiles es el número de renovación (default son todos) SELECT * FROM ::fn_trace_gettable( 'c:my_trace.trc', default)
  • 29. Conferencia Visual FoxPro España 2003 PortalFox.com Y una UDF del sistema no documentada  ::fn_dblog(@start, @end)  Lee el log de transacciones  @start es el Log Sequence Number (LSN)  @end es el último LSN  Se usa (null,null) para leerlo todo  Se cuidadoso con el formato de @start y @end SELECT TOP 10 [Current LSN], Operation FROM ::fn_dblog(NULL, NULL) ORDER BY [Current LSN] DESC
  • 30. Conferencia Visual FoxPro España 2003 PortalFox.com Limitaciones y algunos trucos en las UDF’s de tabla en línea.  Usar ORDER BY dentro de una UDF (Listado 8)  Joins entre UDF’s con otras UDF’s y otras tablas. (listado 9)  Modificar datos desde una UDF (Listado 10)  ¿Cómo usa SQL-SERVER estas funciones?  Intentar detectarlas en el analizador (profiler)  Intentar detectarlas en el plan de ejecución.
  • 31. Conferencia Visual FoxPro España 2003 PortalFox.com Convirtiendo SP’s en UDF’s multicomando.  Las UDF’s multicomando  Son como los procedimientos almacenados.. casi.  Están compilados como los procedimientos almacenados.  Tienen las mismas limitaciones que los procedimientos almacenados.  Pero.. Pueden ser usadas en la cláusula FROM de cualquier secuencia de comandos.
  • 32. Conferencia Visual FoxPro España 2003 PortalFox.com Convertir SP’s en UDF’s multicomando (continuación)  ¿Por qué $#%£! debería convertir mis procedimientos almacenados?  Es muy fácil convertir procedimientos almacenados en funciones.  Son tan rápidas como los procedimientos almacenados.  Aunque, no pueden usar parámetros de salida (OUTPUT)  Aunque, no pueden modificar datos … directamente. Esto es por lo que LAS QUIERO 
  • 33. Conferencia Visual FoxPro España 2003 PortalFox.com Ejemplos de creación de UDFs multicomando. CREATE FUNCTION dbo.tv_GetOrdersFromDay (@date as smalldatetime) RETURNS @list TABLE (OrderID int, OrderDate datetime) AS BEGIN INSERT @List SELECT OrderID, OrderDate FROM Orders WHERE DATEDIFF(day, OrderDate, @date) = 0 RETURN END
  • 34. Conferencia Visual FoxPro España 2003 PortalFox.com Algunas UDF’s multicomando más complejas.  MakeList(@ParamArray, @Separator)  Convierte una cadena de strings en una tabla con un solo campo con cada item separado por @separator en una fila. (Listado 11)  OrderDetailsComplete(@ID, @Key)  Muestra un listado de pedidos con información completa y descriptiva, con cada primary key para unir con otras tablas( Listado 12)  La lista se producirá para cada :  Order (@Key = 'ORD') Product (@Key = 'PRO')  Customer (@Key = 'CUS') Category (@Key = 'CAT')  Full List (@Key NOT IN ('ORD', 'PRO', 'CUS', 'CAT'))
  • 35. Conferencia Visual FoxPro España 2003 PortalFox.com Limitaciones y trucos con las UDF’s multicomando  Solo puedes devolver un conjunto de resultados  Uniendo UDF’s de tabla en línea, con UDF’s multicomando u otras Tablas.  No puedes modificar los datos dentro de una UDF… directamente.  ¿Cómo usa SQL-SERVER estas funciones?  Intentar detectarlas en el analizador (profiler)  Intentar detectarlas en el plan de ejecución.
  • 36. Conferencia Visual FoxPro España 2003 PortalFox.com Creando UDF’s del sistema  Deben ser creadas en master.  SQL-SERVER debe estar configurado para permitir actualizaciones en las tablas del sistema.  El propietario debe ser system_function_schema  Y ya está!!!  Son muy útiles para convertir procedimientos almacenados del sistema en UDF’s  Si quieres usar esos procedimientos almacenados en cláusulas FROM  Y el procedimiento almacenado tiene un código válido para una UDF.
  • 37. Conferencia Visual FoxPro España 2003 PortalFox.com Ejemplo. Convirtiendo sp_lock en fn_lock.  Fn_lock te puede proporcionar más funcionalidad que sp_lock:  Buscando procesos bloqueados.  Buscando bloqueos que afectan a algunos objetos.  Mostrando los bloqueos que afecta a una conexión.  Mostrando bloqueos que afectan al mismo recurso.  Mira el código.  Por ejemplo : SELECT * FROM ::fn_lock() WHERE Status = 'WAIT‘
  • 38. Conferencia Visual FoxPro España 2003 PortalFox.com Ejemplo: Obteniendo información de grupos y usuarios de Windows  fn_getntgroupmembers te informa de los miembros de un grupo de usuarios de windows  gn_getntgroups Te informa de los grupos a los que pertenece un usuario.  Veamos el código:  Por ejemplo: SELECT * FROM ::fn_getntgroups(‘MyDomainMyUse r')
  • 39. Conferencia Visual FoxPro España 2003 PortalFox.com Las UDF’s en las restricciones  Usar UDFs escalares en definiciones DEFAULT  Usar UDFs escalares en restricciones CHECK  Usar UDFs escalares en campos PRIMARY KEY  Usar UDFs escalares en columnas calculadas  “UDFs Provide a New Identity” (SQL Server Magazine, March 2001):  http://www.sqlmag.com/Articles/Index.cfm?Arti cleID=16354  Mira el código. ALTER TABLE IDTest ADD CONSTRAINT def_IDTest DEFAULT (dbo.fn_GetNewID(OBJECT_ID('IDTest'))) FOR ID
  • 40. Conferencia Visual FoxPro España 2003 PortalFox.com Recursos y referencias  Microsoft SQL Server 2000 by Example: http://www.SqlServerByExample.com  SQL Server Magazine: http://www.sqlmag.com  Professional Association of SQL Server: http://www.sqlpass.org  Newsgroups: news://msnews.microsoft.com  Swynk: http://www.swynk.com  CallSQL: http://www.callsql.com  www.SolidQualityLearning.com  PortalSQL.COM : http://www.portalsql.com  Microsoft SQL Server site: http://www.microsoft.com/sql
  • 41. Conferencia Visual FoxPro España 2003 PortalFox.com Gracias!!!!!!!!!!!!!  ¿Preguntas?  Contacte con nosotros en fernan@solidqualitylearning.com y webmaster@portalsql.com
  • 42. Conferencia Visual FoxPro España 2003 PortalFox.com ¡Gracias! Acuérdese de rellenar la hoja de evaluación