CREACION DE FUNCIONES EN SQL SERVER
En SQL Server, las funciones son bloques de código SQL que realizan una operación específica y devuelven un valor. Las funciones son similares a los procedimientos almacenados, pero están diseñadas principalmente para realizar cálculos y devolver resultados, y tienen ciertas limitaciones y ventajas únicas en comparación con los procedimientos almacenados.
Tipos de Funciones en SQL Server
Existen varios tipos de funciones en SQL Server, cada una con sus propias características y usos:
- Funciones Escalares:
- Devuelven un único valor de un tipo de datos específico.
- Se pueden utilizar en instrucciones SQL como si fueran expresiones o columnas.
- Funciones con Valores de Tabla:
- Devuelven un conjunto de resultados en forma de tabla.
- Pueden ser de dos tipos: funciones con valores de tabla en línea y funciones con valores de tabla con múltiples instrucciones.
- Funciones del Sistema:
- Funciones predefinidas proporcionadas por SQL Server para realizar operaciones comunes, como obtener la fecha actual, manipular cadenas de texto, y más.
Funciones Escalares
Estas funciones devuelven un único valor de un tipo de datos específico. Aquí se muestra cómo crear una función escalar:
Crear una Función Escalar
— Crear una función escalar que calcula el área de un círculo
CREATE FUNCTION dbo.CalculateCircleArea (
@Radius FLOAT
)
RETURNS FLOAT
AS
BEGIN
DECLARE @Area FLOAT;
SET @Area = PI() * @Radius * @Radius;
RETURN @Area;
END;
Usar una Función Escalar
— Usar la función escalar en una consulta
SELECT dbo.CalculateCircleArea(5) AS CircleArea;
Funciones con Valores de Tabla en Línea
Estas funciones devuelven una tabla y son similares a una vista parametrizada.
Crear una Función con Valores de Tabla en Línea
— Crear una función con valores de tabla en línea que devuelve los productos de una categoría específica
CREATE FUNCTION dbo.GetProductsByCategory (
@CategoryID INT
)
RETURNS TABLE
AS
RETURN (
SELECT ProductID, ProductName, Price
FROM Products
WHERE CategoryID = @CategoryID
);
Usar una Función con Valores de Tabla en Línea
— Usar la función con valores de tabla en una consulta
SELECT * FROM dbo.GetProductsByCategory(1);
Funciones con Valores de Tabla con Múltiples Instrucciones
Estas funciones permiten realizar múltiples operaciones antes de devolver la tabla.
Crear una Función con Valores de Tabla con Múltiples Instrucciones
— Crear una función con valores de tabla con múltiples instrucciones
CREATE FUNCTION dbo.GetTopProductsByCategory (
@CategoryID INT,
@TopN INT
)
RETURNS @TopProducts TABLE (
ProductID INT,
ProductName NVARCHAR(50),
Price DECIMAL(10, 2)
)
AS
BEGIN
INSERT INTO @TopProducts
SELECT TOP (@TopN) ProductID, ProductName, Price
FROM Products
WHERE CategoryID = @CategoryID
ORDER BY Price DESC;
RETURN;
END;
Usar una Función con Valores de Tabla con Múltiples Instrucciones
— Usar la función con valores de tabla con múltiples instrucciones en una consulta
SELECT * FROM dbo.GetTopProductsByCategory(1, 5);
Funciones del Sistema
SQL Server proporciona muchas funciones del sistema predefinidas para realizar operaciones comunes. Algunos ejemplos incluyen:
Ejemplos de Funciones del Sistema
- Fecha y Hora:
- GETDATE(): Devuelve la fecha y hora actuales.
- DATEADD(): Agrega un intervalo a una fecha.
— Obtener la fecha y hora actuales
SELECT GETDATE() AS CurrentDateTime;
— Agregar 7 días a la fecha actual
SELECT DATEADD(DAY, 7, GETDATE()) AS NextWeek;
- Cadenas de Texto:
- LEN(): Devuelve la longitud de una cadena.
- SUBSTRING(): Devuelve una subcadena.
— Obtener la longitud de una cadena
SELECT LEN(‘SQL Server’) AS StringLength;
— Obtener una subcadena
SELECT SUBSTRING(‘SQL Server’, 1, 3) AS SubString;
Use northwind
go
–1.Creacion de Funciones Escalares
CREATE FUNCTION Iva (@DATE money)
RETURNS money
AS
BEGIN
Declare @iva money
Set @Iva=@date*.12
Return(@iva)
END
–3.Revisar la funcion debe de escribirse el nombre con dos partes
Select unitprice, dbo.iva(unitprice) as iva from [order details]
–4.borrar la funcion
drop function iva
–5.Otro ejemplo de funcion
CREATE Function Comision(@valor money)
ReturnS money
as
Begin
Declare @Resultado money
if @valor>=15
BEGIN
SET @RESULTADO= @VALOR * 1.10
END
ELSE
BEGIN
SET @RESULTADO=@VALOR
END
RETURN @RESULTADO
END
–ejecutar la funcion
SELECT UNITPRICE, DBO.Comision(UNITPRICE) FROM [ORDER DETAILS]
/* en una funcion no se pueden usar estas funciones no determiniestas
@@ERROR FORMATMESSAGE IDENTITY USER_NAME
@@IDENTITY GETANSINULL NEWID @@ERROR
@@ROWCOUNT GETDATE PERMISSIONS @@IDENTITY
@@TRANCOUNT GetUTCDate SESSION_USER @@ROWCOUNT
APP_NAME HOST_ID STATS_DATE @@TRANCOUNT
CURRENT_TIMESTAMP HOST_NAME SYSTEM_USER
CURRENT_USER IDENT_INCR TEXTPTR
DATENAME IDENT_SEED TEXTVALID
*/
–6.Una función con valores de tabla de varias instrucciones es una combinación de una vista y un procedimiento almacenado.
CREATE FUNCTION LISTAPORPAIS(@PAIS VARCHAR(50))
RETURNS @CLIENTES TABLE
(
CUSTOMERID VARCHAR(10), COMPANYNAME VARCHAR(50),CONTACTNAME VARCHAR(50) ,COUNTRY VARCHAR(50)
)
AS
BEGIN
INSERT @CLIENTES SELECT CUSTOMERID,COMPANYNAME,CONTACTNAME,COUNTRY FROM CUSTOMERS
WHERE COUNTRY=@PAIS
RETURN
END
–7.EJECUCION DE FUNCION
SELECT * FROM LISTAPORPAIS(‘GERMANY’)
–8.Ejemplo de una función con valores de tabla en línea
CREATE FUNCTION DETALLEPEDIDO_FECHA(@INICIO DATETIME, @FIN DATETIME)
RETURNS TABLE
AS
RETURN
(
SELECT O.ORDERID,O.ORDERDATE,P.PRODUCTID, P.PRODUCTNAME,(OD.UNITPRICE * OD.QUANTITY) AS TOTAL
FROM ORDERS AS O INNER JOIN [ORDER DETAILS] AS OD
ON O.ORDERID=OD.ORDERID INNER JOIN PRODUCTS AS P
ON OD.PRODUCTID=P.PRODUCTID
WHERE O.ORDERDATE BETWEEN @INICIO AND @FIN
)
–Ejecutar la funcion
SELECT * FROM DBO.DETALLEPEDIDO_FECHA(‘1998-01-01’,‘1998-31-12’)
|
muchas gracias me sirvio de muchio tu primera funcion escalar ojala hicieras mas de estas ami parecer son la mas dificiles!!
que vivos son se han copiado del video de otro pata, igual tambien una chica puso un video que nos de ella y justo tambien ha utilizado este video ella