Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LABORATORIO Nº 03
PROGRAMACIÓN DE FUNCIONES DE TABLAS
USE AdventureWorks2012
go
if OBJECT_ID ('dbo.fnCanStockInventario', 'FN') is not null
drop function dbo.fnCanStockInventario
go
create function dbo.fnCanStockInventario(@ProductID int)
returns int
AS
-- devolver Stock para el producto
Begin
declare @ret int
select @ret = SUM(P.quantity)
from Production.ProductInventory P
where P.ProductID = @ProductID
and P.LocationID = '6'
if (@ret is null)
SET @ret = 0
return @ret
End
go
-- Función para obtener los agregados de las ventas hasta la fecha como venta total para cada
-- producto vendido en el almacen
USE AdventureWorks2012
go
if OBJECT_ID ('sales.fnVentasporAlmacen', 'FN') is not null
drop function sales.fnVentasporAlmacen
go
create function sales.fnVentasporAlmacen(@Storeid int)
returns table
AS
return
( select P.ProductID, P.Name, SUM(SD.LineTotal) as 'Venta Total'
from Production.Product as P
join sales.salesOrderDetail as SD
on SD.ProductID=P.ProductID
join Sales.SalesOrderHeader as SH
on SH.SalesOrderID = SD.SalesOrderID
where SH.CustomerID = @StoreID
group by P.ProductID, P.Name
)
go
USE AdventureWorks2012
go
select * from sales.fnVentasporAlmacen (29565)
-- Forma2:
USE AdventureWorks2012
go
select * from HumanResources.fnNombreEmpleados('Nombre Completo')
use AdventureWorks2012
go
if OBJECT_ID ('fnProductosEnCateg', 'FN') is not null
drop function fnProductosEnCateg
go
create function fnProductosEnCateg(@Categoria varchar(50))
returns @Productos table(ProductID int primary key,
Producto varchar(50), ProductLine char(02),
Categoria varchar(50))
AS
Begin
Insert @Productos select P.ProductID, P.Name, P.ProductLine, K.Name
from Production.Product P
inner join Production.ProductCategory K
on P.ProductSubCategoryID=K.ProductCategoryID
where K.Name=@Categoria
return
end
go
select *
from dbo.fnProductosEnCateg('Bikes')
5. Funciones de tablas
USE [AdventureWorks2012]
GO
USE AdventureWorks2012
go
if OBJECT_ID ('[dbo].[ufnGetContactInformation]', 'FN') is not null
drop function [dbo].[ufnGetContactInformation]
go
-- Desde un contacto puede servir para múltiples funciones, más de una fila puede
-- ser devuelto.
BEGIN
IF @PersonID IS NOT NULL
BEGIN
IF EXISTS(SELECT * FROM [HumanResources].[Employee] e
WHERE e.[BusinessEntityID] = @PersonID)
INSERT INTO @retContactInformation
SELECT @PersonID, p.FirstName, p.LastName, e.[JobTitle], 'Employee'
FROM [HumanResources].[Employee] AS e
INNER JOIN [Person].[Person] p
ON p.[BusinessEntityID] = e.[BusinessEntityID]
WHERE e.[BusinessEntityID] = @PersonID;