{"id":1771,"date":"2020-05-24T23:58:44","date_gmt":"2020-05-24T23:58:44","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1771"},"modified":"2020-05-24T23:58:45","modified_gmt":"2020-05-24T23:58:45","slug":"tipos-de-datos-definidos-por-el-usuario-con-formato-de-tabla","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1771","title":{"rendered":"Tipos de datos definidos por el usuario con formato de tabla"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"230\" height=\"307\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla__D.png\" alt=\"\" class=\"wp-image-1772\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla__D.png 230w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla__D-225x300.png 225w\" sizes=\"auto, (max-width: 230px) 100vw, 230px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de datos definidos por el usuario con formato de tabla en SQL Server<\/h2>\n\n\n\n<p>Los tipos de datos definidos por el usuario son bastante \u00fatiles para estandarizar los tipos de datos en las tablas, estos son creados en base a los tipos de datos nativos de SQL Server (<a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=1313\" target=\"_blank\">Ver Tipos de datos definidos por el usuari<\/a><a href=\"https:\/\/manualsqlserver.com\/?p=1313\" target=\"_blank\" rel=\"noreferrer noopener\">o<\/a>).<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Un tipo de dato definido por el usuario que puede ser de bastante utilidad es el que se le da la estructura de una tabla. Puede permitir al ser usado dentro de un procedimiento almacenado (<a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=314\" target=\"_blank\">Ver Procedimientos Almacenados<\/a>) para ingresar varios registros en una sola instrucci\u00f3n.<\/p>\n\n\n\n<p>La forma de crear un tipo de datos definido por el usuario con formato de tabla es similar a la creaci\u00f3n de una tabla, no se puede crear usando el asistente, no se puede modificar.<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:22px\"><strong>Instrucci\u00f3n: Create Type<\/strong><\/p>\n\n\n\n<p>Permite crear un tipo de dato definido por el usuario con formato de tabla.<br>Sintaxis<br>Create type [Esquema.]NombreTipoDatos As Table<br>(<br>Definici\u00f3n de la estructura (<a href=\"https:\/\/manualsqlserver.com\/?p=117\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Create Table<\/a>)<br>)<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Instrucci\u00f3n: Drop Type<\/strong><\/p>\n\n\n\n<p>Elimina un tipo de dato definido por el usuario.<br>Drop type [Esquema.]NombreTipoDatos<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Usando Tipos de datos definidos por el usuario con formato de tabla<\/strong><\/p>\n\n\n\n<p><strong>Para el ejemplo se crear\u00e1 una base de datos con una tabla de Personas.<\/strong><br>Create database Tipos<br>go<br>Use Tipos<br>go<\/p>\n\n\n\n<p><strong>Crear la tabla Personas<\/strong><br>Create Table Personas(<br>PersonasCodigo nchar(8) Not Null,<br>PersonasPaterno nvarchar(100) Not Null,<br>PersonasMaterno nvarchar(100) Not Null,<br>PersonasNombre nvarchar(100) Not Null,<br>PersonasFechaNacimiento Date<br>constraint PersonasPK Primary key (PersonasCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>Crear el tipo de dato definido por el usuario con la misma estructura de la tabla<\/strong><br>Create Type udtPersonasTipoTabla As Table<br>(<br>PersonasCodigo nchar(8) Not Null,<br>PersonasPaterno nvarchar(100) Not Null,<br>PersonasMaterno nvarchar(100) Not Null,<br>PersonasNombre nvarchar(100) Not Null,<br>PersonasFechaNacimiento Date<br>)<br>go<\/p>\n\n\n\n<p>Para visualizar los tipos de datos definidos por el usuario<br>select * from sys.types where is_user_defined = 1<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\/2020\/05\/ManualSQL_udfTipoTabla_01-1024x78.png\" alt=\"\" class=\"wp-image-1773\" width=\"733\" height=\"56\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_01-1024x78.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_01-300x23.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_01-768x59.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_01.png 1346w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Uso del tipo de datos definido por el usuario tipo tabla<\/strong><\/p>\n\n\n\n<p>Podemos usar el tipo de dato desde SSMS con las siguientes instrucciones<\/p>\n\n\n\n<p><strong>Insertar varios registros en el tipo de dato<\/strong><br>Declare @NuevasPersonas As udtPersonasTipoTabla<br>Insert @NuevasPersonas values<br>(&#8216;TFR97089&#8242;,&#8217;Campos&#8217;,&#8217;Pereda&#8217;,&#8217;Carlos&#8217;,&#8217;21\/11\/1983&#8242;),<br>(&#8216;TRG97098&#8242;,&#8217;Terranova&#8217;,&#8217;Chavez&#8217;,&#8217;Lizeth&#8217;,&#8217;12\/06\/1980&#8242;),<br>(&#8216;FTG88699&#8242;,&#8217;Sandoval&#8217;,&#8217;Villacorta&#8217;,&#8217;Elena&#8217;,&#8217;16\/08\/1996&#8242;),<br>(&#8216;DEF48885&#8242;,&#8217;Silva&#8217;,&#8217;Alvarado&#8217;,&#8217;Fernando&#8217;,&#8217;12\/09\/1990&#8242;),<br>(&#8216;WSE59970&#8242;,&#8217;S\u00e1nchez&#8217;,&#8217;Vargas&#8217;,&#8217;V\u00edctor&#8217;,&#8217;21\/11\/1966&#8242;)<br>Insert into Personas<br>select * from @NuevasPersonas<br>go<\/p>\n\n\n\n<p>Visualizar el resultado en la tabla Personas<br>select * from Personas<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\/2020\/05\/ManualSQL_udfTipoTabla_02.png\" alt=\"\" class=\"wp-image-1774\" width=\"807\" height=\"181\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_02.png 1008w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_02-300x67.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_02-768x172.png 768w\" sizes=\"auto, (max-width: 807px) 100vw, 807px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Uso del UDT de tipo Tabla en un Procedimiento Almacenado<\/strong><\/p>\n\n\n\n<p><strong>Crear un procedimiento almacenado que inserte datos a la tabla Personal usando el tipo de dato creado llamado udtPersonasTipoTabla.<br>En el procedimiento almacenado se usar\u00e1 en tipo de dato con formato de tabla, este debe crearse de tipo Solo L\u00e9ctura.<\/strong><\/p>\n\n\n\n<p>Create procedure spPersonasInsertaMultiple<br>(@PersonasNuevas As udtPersonasTipoTabla READONLY)<br>AS<br>Begin<br>Set nocount on<br>Insert into Personas<br>(PersonasCodigo, PersonasPaterno, PersonasMaterno,<br>PersonasNombre, PersonasFechaNacimiento)<br>Select * from @PersonasNuevas<br>End<br>go<\/p>\n\n\n\n<p><strong>Ejecutar el SP, para esto debemos declarar una variable con el tipo de dato definido por el usuario con formato de tabla e insertar datos, luego enviar esa variable en la ejecuci\u00f3n del SP.<\/strong><\/p>\n\n\n\n<p>Declare @NuevosRegistros as udtPersonasTipoTabla<br>Insert @NuevosRegistros values<br>(&#8216;NJU47587&#8242;,&#8217;Saavedra&#8217;,&#8217;Ganoza&#8217;,&#8217;Sergio&#8217;,&#8217;13\/02\/1996&#8242;),<br>(&#8216;NDE09803&#8242;,&#8217;Plasencia&#8217;,&#8217;Llanos&#8217;,&#8217;C\u00e9sar&#8217;,&#8217;15\/12\/1997&#8242;),<br>(&#8216;SCD48859&#8242;,&#8217;Carranza&#8217;,&#8217;P\u00e9rez&#8217;,&#8217;Mar\u00eda Fernanda&#8217;,&#8217;01\/10\/1985&#8242;)<br>Execute spPersonasInsertaMultiple @NuevosRegistros<br>go<\/p>\n\n\n\n<p>Ver los resultados con los registros insertados desde el SP<br>select * from Personas<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\/2020\/05\/ManualSQL_udfTipoTabla_03-1024x293.png\" alt=\"\" class=\"wp-image-1775\" width=\"783\" height=\"223\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_03-1024x293.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_03-300x86.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_03-768x220.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_udfTipoTabla_03.png 1048w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Tipos de datos definidos por el usuario con formato de tabla en SQL Server Los tipos de datos definidos por el usuario son bastante \u00fatiles para estandarizar los tipos de datos en las tablas, estos son creados en base a los tipos de datos nativos de SQL Server (Ver Tipos de datos definidos por el &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1771\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1772,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,9],"tags":[186,188,187],"class_list":["post-1771","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-registros-vistas","tag-create-type","tag-sp","tag-table","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1771","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=1771"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1771\/revisions"}],"predecessor-version":[{"id":1776,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1771\/revisions\/1776"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1772"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}