CREACION DE FUNCIONES EN SQL SERVER
PROGRAMACIÓN CON TRANSACT: Creación de Funciones
Existen tres tipos de funciones en SQL Server una parece ser como el tipo de funciones de los leguajes de programación donde se le envía un valor y retorna un resulta a esta se les llama funciones escalares, los otros dos tipos de funciones resultan un hibrido entre vista y procedimiento almacenado, permitiendo enviar parámetros a una consulta, en este video se revisa su funcionamiento.
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