{"id":1900,"date":"2020-05-26T16:59:04","date_gmt":"2020-05-26T16:59:04","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1900"},"modified":"2020-05-26T16:59:06","modified_gmt":"2020-05-26T16:59:06","slug":"persisted-en-campos-calculados","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1900","title":{"rendered":"Persisted en campos calculados"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"210\" height=\"278\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted__D.png\" alt=\"\" class=\"wp-image-1901\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula Persisted en campos calculados en SQL Server<\/h2>\n\n\n\n<p>La cl\u00e1usula Persisted se puede utilizar en la definici\u00f3n de un campo calculado en las tablas de una base de datos en SQL Server.<br>Los campos calculados en las tablas permiten almacenar los datos que se calculan en base a los campos de la misma tabla. (<a href=\"https:\/\/manualsqlserver.com\/?p=137\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Campos calculados<\/a>).<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>En este art\u00edculo se mostrar\u00e1 como al usar la cl\u00e1usula Persisted en un campo calculado y luego listar y actualizar los registros mostrando el Plan de  ejecuci\u00f3n estimado tanto en la tabla que tiene la cl\u00e1usula Persisted como en otra que no se ha utilizado.<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Usando Persisted en campos calculados <\/strong><\/p>\n\n\n\n<p>Usando la base de datos Nortwind, se va a crear dos tablas y copiar los datos de la tabla Products (Productos). En ambas tablas habr\u00e1 la misma cantidad de registros y los mismos campos, en una de las tablas se usar\u00e1 la clausula Persisted en la creaci\u00f3n del campo calculado para el valor del Stock y en otra tabla no se usar\u00e1 Persisted.<\/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>use Northwind<br>go<br><strong>La tabla siguiente se usar\u00e1 la cl\u00e1usula Persisted en el campo calculado del Valor del Stock. (<a href=\"https:\/\/manualsqlserver.com\/?p=117\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Create Table<\/a>)<\/strong><br>Create table ProductosConPersisted<br>(<br>ProductosConPersistedCodigo nchar(5),<br>ProductosConPersistedDescripcion nvarchar(50),<br>ProductosConPersistedUnidad nvarchar(30),<br>ProductosConPersistedPrecio Numeric(9,2),<br>ProductosConPersistedStock Numeric(9,2),<br>ProductosConPersistedValorStock As (ProductosConPersistedPrecio * ProductosConPersistedStock) Persisted<br>constraint ProductosConPersistedPK primary key (ProductosConPersistedCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>La tabla siguiente NO se usar\u00e1 la cl\u00e1usula Persisted en el campo calculado del Valor del Stock.<\/strong><br>Create table ProductosSinPersisted<br>(<br>ProductosSinPersistedCodigo nchar(5),<br>ProductosSinPersistedDescripcion nvarchar(50),<br>ProductosSinPersistedUnidad nvarchar(30),<br>ProductosSinPersistedPrecio Numeric(9,2),<br>ProductosSinPersistedStock Numeric(9,2),<br>ProductosSinPersistedValorStock As (ProductosSinPersistedPrecio * ProductosSinPersistedStock)<br>constraint ProductosSinPersistedPK primary key (ProductosSinPersistedCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>Llenar las tablas con los registros de Products.<br>Primero la tabla cuyo campo calculado ha sido creado usando la cl\u00e1usula Persisted. (<a href=\"https:\/\/manualsqlserver.com\/?p=294\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Insert<\/a>)<\/strong><br>Insert into ProductosConPersisted<br>select<br>Right(&#8216;0000&#8217;+trim(Str(P.ProductID)),5), P.ProductName,<br>P.QuantityPerUnit , P.UnitPrice, P.UnitsInStock<br>from Products As P<br>go<\/p>\n\n\n\n<p><strong>Segundo la tabla cuyo campo calculado NO ha sido creado usando la cl\u00e1usula Persisted.<\/strong><br>Insert into ProductosSinPersisted<br>select<br>Right(&#8216;0000&#8217;+trim(Str(P.ProductID)),5), P.ProductName,<br>P.QuantityPerUnit , P.UnitPrice, P.UnitsInStock<br>from Products As P<br>go<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Ver los datos de las tablas<\/strong><\/p>\n\n\n\n<p>Select * from ProductosConPersisted<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\/ManualSQLServer_Persisted_01.png\" alt=\"\" class=\"wp-image-1903\" width=\"745\" height=\"505\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_01.png 780w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_01-300x203.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_01-768x521.png 768w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/figure>\n\n\n\n<p>Select * from ProductosSinPersisted<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\/ManualSQLServer_Persisted_02.png\" alt=\"\" class=\"wp-image-1902\" width=\"737\" height=\"502\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_02.png 780w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_02-300x205.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_02-768x524.png 768w\" sizes=\"auto, (max-width: 737px) 100vw, 737px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Analizando los resultados<\/strong><\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Actualizar los datos (<a href=\"https:\/\/manualsqlserver.com\/?p=300\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Update<\/a>)<\/strong><\/p>\n\n\n\n<p><strong>La tabla cuyo campo calculado se incluy\u00f3 la cl\u00e1usula Persisted<\/strong><br>update ProductosConPersisted<br>set ProductosConPersistedPrecio = ProductosConPersistedPrecio * 1.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\/ManualSQLServer_Persisted_03-1024x476.png\" alt=\"\" class=\"wp-image-1904\" width=\"753\" height=\"350\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_03-1024x476.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_03-300x140.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_03-768x357.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_03.png 1152w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/figure>\n\n\n\n<p><strong>La tabla cuyo campo calculado NO se incluy\u00f3 la cl\u00e1usula Persisted<br><\/strong>update ProductosSinPersisted<br>set ProductosSinPersistedPrecio = ProductosSinPersistedPrecio * 1.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\/ManualSQLServer_Persisted_04-1024x475.png\" alt=\"\" class=\"wp-image-1905\" width=\"753\" height=\"349\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_04-1024x475.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_04-300x139.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_04-768x356.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_04.png 1142w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/figure>\n\n\n\n<p style=\"font-size:18px\"><strong>Creando \u00edndices para cada campo calculado en las tablas. (Ver \u00cdndices)<\/strong><\/p>\n\n\n\n<p>Create index ValorStockConPersistedIDX on<br>ProductosConPersisted(ProductosConPersistedValorStock)<br>go<br>Create index ValorStockSinPersistedIDX on<br>ProductosSinPersisted(ProductosSinPersistedValorStock)<br>go<\/p>\n\n\n\n<p><strong>Para analizar el resultado mostrando los registros ordenados por el campo calculado<\/strong><br>select * from ProductosConPersisted<br>order by ProductosConPersistedValorStock desc<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\/ManualSQLServer_Persisted_05.png\" alt=\"\" class=\"wp-image-1906\" width=\"706\" height=\"447\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_05.png 842w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_05-300x190.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_05-768x487.png 768w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/figure>\n\n\n\n<p>select * from ProductosSinPersisted<br>order by ProductosSinPersistedValorStock desc<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\/ManualSQLServer_Persisted_06.png\" alt=\"\" class=\"wp-image-1907\" width=\"715\" height=\"464\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_06.png 822w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_06-300x195.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_06-768x499.png 768w\" sizes=\"auto, (max-width: 715px) 100vw, 715px\" \/><\/figure>\n\n\n\n<p>Si visualizamos el espacio ocupados por las tablas podemos notar que la tabla que tiene el campo calculado marcado como Persisted su \u00edndice ocupa un mayor espacio que la tabla que no tiene marcado como Persisted el campo calculado.<br>sp_spaceused ProductosConPersisted<br>go<br>sp_spaceused ProductosSinPersisted<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\/ManualSQLServer_Persisted_07.png\" alt=\"\" class=\"wp-image-1908\" width=\"740\" height=\"360\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_07.png 824w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_07-300x146.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Persisted_07-768x375.png 768w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/figure>\n\n\n\n<p><strong>Por \u00faltimo, una tabla sin campo calculado el cual se presentar\u00e1 al listar los registros.<\/strong><br>Create table ProductosSinCalculado<br>(<br>ProductosSinCalculadoCodigo nchar(5),<br>ProductosSinCalculadoDescripcion nvarchar(50),<br>ProductosSinCalculadoUnidad nvarchar(30),<br>ProductosSinCalculadoPrecio Numeric(9,2),<br>ProductosSinCalculadoStock Numeric(9,2),<br>constraint ProductosSinCalculadoPK primary key (ProductosSinCalculadoCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>Llenar las tablas con los registros de Products.<br><\/strong>Insert into ProductosSinCalculado<br>select<br>Right(&#8216;0000&#8217;+trim(Str(P.ProductID)),5), P.ProductName,<br>P.QuantityPerUnit , P.UnitPrice, P.UnitsInStock<br>from Products As P<br>go<\/p>\n\n\n\n<p>Listado incluyendo el campo calculado.<br>select *,<br>&#8216;Valor del Stock&#8217; = P.ProductosSinCalculadoPrecio * P.ProductosSinCalculadoStock<br>from ProductosSinCalculado As P<br>go<\/p>\n\n\n\n<p class=\"has-background has-very-light-gray-background-color\"><strong>Decida usted mismo, la sugerencia es usar los campos calculados para evitar tener que realizar c\u00e1lculos previos para mostrar los datos totalizados o cuando extraiga informaci\u00f3n de varias tablas usando Joins (Ver Joins) y necesite el campo calculado.. Evalue siempre las diferentes alternativas.<\/strong><\/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","protected":false},"excerpt":{"rendered":"<p>Cl\u00e1usula Persisted en campos calculados en SQL Server La cl\u00e1usula Persisted se puede utilizar en la definici\u00f3n de un campo calculado en las tablas de una base de datos en SQL Server.Los campos calculados en las tablas permiten almacenar los datos que se calculan en base a los campos de la misma tabla. (Ver Campos &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1900\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1901,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[106,20,209],"class_list":["post-1900","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esquemastablas","tag-alter-table","tag-create-table","tag-persisted","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1900","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=1900"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1900\/revisions"}],"predecessor-version":[{"id":1909,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1900\/revisions\/1909"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1901"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1900"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}