Esta sección ha sido analizado por expertos así se garantiza la veracidad de este escrito.
Esto no es posible para el SELECT
sintaxis. BOL establece: “Las funciones con valores escalares deben invocarse utilizando al menos el nombre de dos partes de la función”
Sin embargo, esta sintaxis funciona.
CREATE FUNCTION USERFUNCTION
(@p INT)
RETURNS INT
AS
BEGIN
RETURN (2)
END
GO
DECLARE @rc INT
EXEC @rc = USERFUNCTION 1
SELECT @rc
Sin embargo, es una buena práctica calificar siempre explícitamente el esquema de los objetos a los que hace referencia para evitar algunos gastos generales para resolver el esquema (y evitar la posibilidad de que el esquema no se pueda resolver implícitamente o se resuelva de una manera no deseada)
Hay varias formas de hacer esto, si consideramos que tiene una reacción negativa al ver “dbo”.
En SQL Server 2000, existe una forma de convertir las UDF en funciones del sistema alternando un poco. Esta “característica” se eliminó de SQL Server 2005 en adelante, por lo que no entraré en detalles a menos que realmente todavía esté usando 2000.
Puede usar OPENQUERY con sintaxis PROC similar a lo que ha mostrado Martin.
Puede convertir la función escalar en una función con valores de tabla, ya sea reescribiéndola o envolviéndola en un TVF. Sin embargo, la sintaxis cambia, por lo que
select dbo.udf(a,b) from c
--becomes
select d
from c
cross apply tvf(a,b) e(d) -- look, no "dbo"!
Pero nada de lo anterior parece más simple que simplemente agregar un simple “dbo”. prefix al nombre de la función, entonces, ¿por qué lo haría?
valoraciones y reseñas
Tienes la opción de añadir valor a nuestra información cooperando tu experiencia en los comentarios.