Funciones definidas por el usuario (SQL UDF) C# y MS Jet

11/10/2004 - 12:30 por Francisco Gomez | Informe spam
Quisiera poder crear funciones agregadas definidas por el
usuario (UDF) que funcionen del mismo modo que las que se
crean con "CREATE FUNCTION" en un servidor SQL, pero
definidas como funciones en C#.

El caso es que quiero que estas funciones puedan trabajar
con cualquier fuente de datos (MS Jet para Access, ODBC,
etc...) que admita SQL. No puedo usar procedimientos
almacenados en un servidor SQL.

¿Saben como implementarlo?

Gracias

Preguntas similare

Leer las respuestas

#1 SqlRanger
12/10/2004 - 09:19 | Informe spam
Lo siento, pero no es posible implementar eso. La razón es que una
instrucción SQL como esta:

SELECT *, TuFuncion(UnCampo) FROM TABLA

La ejecuta el servidor de base de datos. Por tanto dicho servidor tiene que
conocer la funcion TuFuncion.

De momento, el único servidor de bases de datos que es capaz de ejecutar
funciones definidas por el usuario escritas en C# es SQL Server 2005 y
todavía está en fase beta 2.

Saludos:

Jesús López
MVP



"Francisco Gomez" escribió en el
mensaje news:287901c4af7d$4ba788a0$
Quisiera poder crear funciones agregadas definidas por el
usuario (UDF) que funcionen del mismo modo que las que se
crean con "CREATE FUNCTION" en un servidor SQL, pero
definidas como funciones en C#.

El caso es que quiero que estas funciones puedan trabajar
con cualquier fuente de datos (MS Jet para Access, ODBC,
etc...) que admita SQL. No puedo usar procedimientos
almacenados en un servidor SQL.

¿Saben como implementarlo?

Gracias
Respuesta Responder a este mensaje
#2 Francisco Gomez
18/10/2004 - 13:01 | Informe spam
Gracias por tu respuesta.

En mi caso particular, al menos, estoy inicialmente trabajando sobre Access.
Si no me equivoco, puedo crear una funcion escalar cualquiera en Access e
invocarla desde SQL. Sé que esto puedo hacerlo desde DENTRO de Access.

¿Puedo hacer esto pasando la sentencia SQL al motor Jet desde C#, es decir,
invocar una función definida dentro de un módulo de Access?

Y ahora, la pregunta del millon Desearía que la función fuera AGREGADA,
es decir, algo como:

SELECT MiMedia(Campo2) as MediaValor FROM Tabla1 GROUP BY Campo1

¿Se puede implementar en Access una función del tipo MiMedia, que reciba un
set de valores (los correspondientes a cada agrupación según Campo1), y
devuelva un único valor para cada grupo? ¿Como se implementaría (parámetros
de entrada y salida), y cómo se usaría (una sentencia SQL ejemplo, por favor)?

Gracias. Esta es dificil... :)

"SqlRanger" escribió:

Lo siento, pero no es posible implementar eso. La razón es que una
instrucción SQL como esta:

SELECT *, TuFuncion(UnCampo) FROM TABLA

La ejecuta el servidor de base de datos. Por tanto dicho servidor tiene que
conocer la funcion TuFuncion.

De momento, el único servidor de bases de datos que es capaz de ejecutar
funciones definidas por el usuario escritas en C# es SQL Server 2005 y
todavía está en fase beta 2.

Saludos:

Jesús López
MVP



"Francisco Gomez" escribió en el
mensaje news:287901c4af7d$4ba788a0$
Quisiera poder crear funciones agregadas definidas por el
usuario (UDF) que funcionen del mismo modo que las que se
crean con "CREATE FUNCTION" en un servidor SQL, pero
definidas como funciones en C#.

El caso es que quiero que estas funciones puedan trabajar
con cualquier fuente de datos (MS Jet para Access, ODBC,
etc...) que admita SQL. No puedo usar procedimientos
almacenados en un servidor SQL.

¿Saben como implementarlo?

Gracias



Respuesta Responder a este mensaje
#3 SqlRanger
19/10/2004 - 14:51 | Informe spam
Es cierto que puedes crear una función escalar cualquiera en VBA y
ejecutarla dentro de Access. Sin embargo cuando ejecutas la consulta fuera
de Access, uses lo que uses: DAO, ADO, ADO.NET, la función resulta
desconocida dándote un error.

De ninguna manera puedes crear funiones agregadas definidas por el usuario
en Access. Sin embargo sí lo puedes hacer en SQL Server 2005 usando C#,
VB.NET o cualquier otro lenguaje compatible .NET.

Te recomendaría que te olvidaras de las bases de datos de Access y usaras
SQL Server. SQL Server tiene ediciones gratis como MSDE 2K y SQL Server
Express (Beta 2). SQL Server Express es un SQL Server 2005 recortado, pero
tiene todas las capacidades del motor de base de datos, incluido la
posibilidad de crear funciones definidas por el usuario, procedimientos
almacenados, triggers, funciones agregadas y tipos en C# y VB.NET

SQL Server Desktop Engine 2000 Release A (MSDE 2K):

http://www.microsoft.com/downloads/...b278eb9147


SQL Server Express:

http://www.microsoft.com/downloads/...layLang=en

Saludos:

Jesús López
MVP
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida