{"id":657,"date":"2017-09-19T23:10:50","date_gmt":"2017-09-19T23:10:50","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=657"},"modified":"2020-07-17T21:40:16","modified_gmt":"2020-07-17T21:40:16","slug":"funciones-definidas-por-el-usuario-con-valores-de-tabla","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=657","title":{"rendered":"Funciones definidas por el usuario con valores de tabla"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"325\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_D.png\" alt=\"\" class=\"wp-image-972\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_D.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_D-277x300.png 277w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Funciones definidas por el usuario con valores de tabla<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\"><li>Las <a href=\"http:\/\/www.manualsqlserver.com\/?p=335\">funciones definidas por el usuario<\/a> con valores de tabla son las funciones que&nbsp;devuelven un tipo de datos table.<\/li><li>Estas funciones son una alternativa eficaz &nbsp;a las vistas. (<a href=\"http:\/\/www.manualsqlserver.com\/?p=310\">Ver vistas<\/a>).<\/li><li>Las funciones definidas por el usuario con valores de tabla pueden ser utilizadas cuando se permitan expresiones de vista o de tabla en las consultas Transact-SQL.<\/li><li>Las funciones definidas por el usuario con valores de tabla pueden contener instrucciones adicionales mejorando la l\u00f3gica de las vistas.<\/li><li>Las vistas s\u00f3lo permiten a una \u00fanica instrucci\u00f3n SELECT, las funciones definidas por el usuario puede tener joins y agrupamientos.<\/li><li>Una funci\u00f3n definida por el usuario con valores de tabla puede reemplazar tambi\u00e9n a <a href=\"http:\/\/www.manualsqlserver.com\/?p=314\">procedimientos almacenados<\/a> que devuelven un solo conjunto de resultados.<\/li><li>Al usar una funci\u00f3n definida por el usuario con valores de tabla, este se escribe en la cl\u00e1usula FROM de una instrucci\u00f3n Transact-SQL, a la funci\u00f3n se le deben dar los valores para cada par\u00e1metro especificado en la creaci\u00f3n.<\/li><\/ul>\n\n\n\n<!--more-->\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Componentes de una funci\u00f3n definida por el usuario con valores de tabla<\/strong><\/h2>\n\n\n\n<p><strong>Los componentes son:&nbsp;<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>La cl\u00e1usula RETURNS<\/strong>: especifica el nombre de una variable de retorno local para la tabla devuelta por la funci\u00f3n. En la cl\u00e1usula RETURNS se define la estructura de la tabla.<\/li><li><strong>Las instrucciones Transact-SQL<\/strong> del cuerpo de la funci\u00f3n generan e insertan filas en la variable de retorno definida por la cl\u00e1usula RETURNS.<\/li><li><strong>La instrucci\u00f3n RETURN<\/strong> que devielve las filas insertadas en la variable desde la funci\u00f3n en formato tabular. La instrucci\u00f3n RETURN no tiene argumentos.<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ejemplos<\/strong><\/h3>\n\n\n\n<p>Usando la base de datos Northwind<br>use Northwind<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 1<\/strong><br><strong>Crear una funci\u00f3n definida por el usuario con valores de tabla que muestre&nbsp;los proveedores de un determinado pa\u00eds. &nbsp;<\/strong><strong>Para visualizar el resultado se incluir\u00e1 el nombre del pa\u00eds<\/strong><\/p>\n\n\n\n<p><strong>Creamos la funci\u00f3n<\/strong><\/p>\n\n\n\n<p>Create function dbo.fduProveedorPorPais (@NombrePais nvarchar(15))<br>returns @Proveedores Table (Codigo int, Nombre nvarchar(40),<br>Contacto nvarchar(30), Pais nvarchar(15))<br>As<br>Begin<br>insert @Proveedores<br>select S.SupplierID, S.CompanyName,<br>S.ContactName, S.Country<br>from Suppliers As S<br>where S.Country = @NombrePais<br>Return<br>End<br>go<\/p>\n\n\n\n<p><strong>Usando la funci\u00f3n definida por el usuario con valor de tabla.<\/strong><br><strong>Para los proveedores de Estados Unidos (USA)<\/strong><\/p>\n\n\n\n<p><strong>select * from dbo.fduProveedorPorPais(&#8216;USA&#8217;)<\/strong><br><strong>go<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_01.png\" alt=\"\" class=\"wp-image-969\" width=\"801\" height=\"173\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_01.png 713w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_01-300x65.png 300w\" sizes=\"auto, (max-width: 801px) 100vw, 801px\" \/><\/figure><\/div>\n\n\n\n<p><strong>Ejercicio 2<\/strong><br><strong>Crear una funci\u00f3n definida por el usuario con valores de tabla que&nbsp;<\/strong><strong>permite mostrar los productos de una determinada categor\u00eda. Muestre el valor del Stock&nbsp;<\/strong><strong>para cada producto.<\/strong><br><strong>Creamos la funci\u00f3n<\/strong><\/p>\n\n\n\n<p>Create function dbo.fduProductosPorCategoria (@CodigoCategoria int)<br>returns @Productos Table (Codigo int, Descripcion nvarchar(40),<br>Precio Numeric(9,2), Stock Numeric(9,2), ValorStock Numeric(9,2))<br>As<br>Begin<br>insert @Productos<br>select P.ProductID, P.ProductName,<br>P.UnitPrice, P.UnitsInStock, P.UnitPrice*P.UnitsInStock<br>from Products As P<br>where P.CategoryID= @CodigoCategoria<br>Return<br>End<br>go<\/p>\n\n\n\n<p><strong>Utilizar la funci\u00f3n para los productos de la categoria 2<\/strong><\/p>\n\n\n\n<p>Select * from dbo.fduProductosPorCategoria(2)<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_02.png\" alt=\"\" class=\"wp-image-970\" width=\"821\" height=\"509\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_02.png 736w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_02-300x186.png 300w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/figure><\/div>\n\n\n\n<p><strong>Ejercicio 3<\/strong><br><strong>Crear una funci\u00f3n definida por el usuario con valores de tabla que&nbsp;permite mostrar los clientes que hicieron compras en un rango de fechas cualquiera. Las fechas ser\u00e1n los par\u00e1metros de la funci\u00f3n. Se incluir\u00e1 la cantidad de \u00f3rdenes y la carga total de todas las \u00f3rdenes (Freight) (<a href=\"http:\/\/www.manualsqlserver.com\/?p=215\">Ver Joins<\/a>) (<a href=\"http:\/\/www.manualsqlserver.com\/?p=225\">Ver Agrupamientos<\/a>)<\/strong><br><strong>Creamos la funci\u00f3n<\/strong><\/p>\n\n\n\n<p>Create function dbo.fduClientesRangoFecha (@FechaInicial Date, @FechaFinal Date)<br>Returns @ClientesPorRangoFechas Table<br>(Codigo nchar(5), Nombre varchar(100), CantidadOrdenes Numeric(9,2),<br>MontoComprado Numeric(9,2))<br>As<br>Begin<br>Insert @ClientesPorRangoFechas<br>select C.CustomerID, C.CompanyName,<br>Count(O.OrderID), Sum(O.Freight)<br>from Customers As C<br>join Orders As O on C.CustomerID = O.CustomerID<br>where O.OrderDate Between @FechaInicial and @FechaFinal<br>group by C.CustomerID, C.CompanyName<br>Return<br>End<br>go<\/p>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><strong>Mostrar los clientes y la cantidad de \u00f3rdenes y el monto de la carga para el rango de fechas entre 01\/07\/1997 y 15\/07\/1997<\/strong><\/p>\n\n\n\n<p>select * from dbo.fduClientesRangoFecha(&#8217;01\/07\/1997&#8242;,&#8217;15\/07\/1997&#8242;)<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_03.png\" alt=\"\" class=\"wp-image-971\" width=\"826\" height=\"558\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_03.png 760w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDUValoresTabla_03-300x203.png 300w\" sizes=\"auto, (max-width: 826px) 100vw, 826px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Funciones definidas por el usuario con valores de tabla Las funciones definidas por el usuario con valores de tabla son las funciones que&nbsp;devuelven un tipo de datos table. Estas funciones son una alternativa eficaz &nbsp;a las vistas. (Ver vistas). Las funciones definidas por el usuario con valores de tabla pueden ser utilizadas cuando se permitan &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=657\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":972,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,236,6,8,9],"tags":[16,29,40,51],"class_list":["post-657","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-udffunciones","category-funcionessql","category-programacion","category-registros-vistas","tag-create-function","tag-fdu","tag-join","tag-select","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=657"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions"}],"predecessor-version":[{"id":981,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions\/981"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/972"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}