Volver a escribir procedimientos almacenados como funciones

En este tema se describe la manera de determinar si se vuelve a escribir la lógica de un procedimiento almacenado como una función definida por el usuario. Por ejemplo, si desea invocar un procedimiento almacenado directamente desde una consulta, reorganice el código como si fuera una función definida por el usuario.

En general, si el procedimiento almacenado devuelve un solo conjunto de resultados, defina una función con valores de tabla. Si el procedimiento almacenado calcula un valor escalar, defina una función escalar.

Criterios para las funciones con valores de tabla

Si un procedimiento almacenado cumple los siguientes criterios, se puede volver a escribir como una función con valores de tabla:

  • La lógica se puede expresar en una sola instrucción SELECT, pero es un procedimiento almacenado en lugar de una vista por el mero hecho de que requiere parámetros. Este escenario puede controlarse con una función con valores de tabla insertada.

  • Este procedimiento almacenado no realiza operaciones de actualización, excepto en variables de tabla.

  • No son necesarias las instrucciones EXECUTE dinámicas.

  • El procedimiento almacenado devuelve un conjunto de resultados.

  • El objetivo principal de un procedimiento almacenado es generar resultados intermedios que se cargan en una tabla temporal, que luego se consulta en una instrucción SELECT. Las instrucciones INSERT...EXEC pueden escribirse utilizando funciones con valores de tabla. Considere, por ejemplo, la secuencia siguiente:

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    El procedimiento almacenado sp_getresults se puede volver a escribir como una función con valores de tabla, por ejemplo fn_results(), que significa que la instrucción anterior puede volver a escribirse como:

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

Volver a escribir procedimientos almacenados extendidos mediante CLR

Las funciones CLR suponen una alternativa más confiable y escalable frente a los procedimientos almacenados extendidos. Muchos procedimientos almacenados extendidos realizan tareas de cálculo que son difíciles de expresar en Transact-SQL. Tales procedimientos almacenados se pueden volver a escribir mediante CLR para disfrutar de las ventajas descritas anteriormente. Además, los procedimientos almacenados extendidos que devuelven conjuntos de resultados mediante el acceso a un recurso externo, como un archivo o un servicio Web, se pueden volver a escribir mediante una función con valores de tabla CLR. Para obtener más información, vea Crear funciones CLR.