Saltar al contenido

¿Hay alguna manera de usar una función en una consulta de Microsoft SQL Server sin usar “dbo”. antes de la función?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *