<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Fran Otero</title><subtitle type="html">Programación C#, ASP.NET,SqlServer, Mobile y electrónica.</subtitle><id>http://geeks.ms/blogs/franotero/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/franotero/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/franotero/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2009-02-07T16:53:00Z</updated><entry><title>DNI Electrónico Helper</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2011/12/10/dni-electr-243-nico-helper.aspx" /><id>/blogs/franotero/archive/2011/12/10/dni-electr-243-nico-helper.aspx</id><published>2011-12-10T12:11:00Z</published><updated>2011-12-10T12:11:00Z</updated><content type="html">&lt;p&gt;Siempre me ha parecido muy mala la implantaci&amp;oacute;n del DNI electr&amp;oacute;nico: hay muchas p&amp;aacute;ginas que s&amp;oacute;lo lo soportan en navegadores espec&amp;iacute;ficos, otras necesitan lectores espec&amp;iacute;ficos y otras directamente no lo soportan aunque aparentemente s&amp;iacute; que lo hagan. &lt;/p&gt;
&lt;p&gt;En cualquier caso, incluso las que funcionan bien, te exigen escribir la clave unas cuantas veces durante el proceso: para acceder al almac&amp;eacute;n de certificados, selecionarlo, utilizarlo... Al final si tienes una clave segura resulta muy inc&amp;oacute;modo utilizarlo. &lt;/p&gt;
&lt;p&gt;Pensando en esta comodidad y en poder hacer aplicaciones de integraci&amp;oacute;n con bancos automatizadas he desarrollado un peque&amp;ntilde;o programa que al ser ejecutado detecta todas las interacciones con el lector de DNIs e introduce la contrase&amp;ntilde;a sin necesidad de intervenci&amp;oacute;n del usuario. Aunque no os interese la funcionalidad es interesante ver c&amp;oacute;mo se detecta una ventana y se env&amp;iacute;an caracteres a otra aplicaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/PantallaDNI.JPG"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/PantallaDNI.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La presentaci&amp;oacute;n es mejorable :-P, of course, pero funciona! La clave se guarda en AppData encriptada. La opci&amp;oacute;n de &amp;quot;seleccionar certificado&amp;quot; hace que tambien se seleccione autom&amp;aacute;ticamente el certificado, &amp;uacute;til si s&amp;oacute;lo tienes uno en tu equipo. El segundo check muestra un aviso en el &amp;aacute;rea de notificaci&amp;oacute;n cada vez que se detecta la ventana y espera un segundo antes de actuar autom&amp;aacute;ticamente. &lt;/p&gt;
&lt;p&gt;Veamos un poco de c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Detecci&amp;oacute;n de la Ventana de introducci&amp;oacute;n clave DNI electr&amp;oacute;nico y env&amp;iacute;o de caract&amp;eacute;res&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dniApp = FindWindow(null, &amp;quot;DNI electr&amp;oacute;nico&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dniApp.ToInt32() &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (chkNotificaciones.Checked)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; notify.ShowBalloonTip(500, &amp;quot;DNI Electr&amp;oacute;nico Helper&amp;quot;, &amp;quot;Peticion de clave DNI&amp;quot;, ToolTipIcon.None);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(1000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetForegroundWindow(dniApp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.SendWait(Crypto.DecryptStringAES(Properties.Settings.Default.Clave, claveEncriptacion));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.SendWait(&amp;quot;{ENTER}&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Imports de DLLs&lt;br /&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DllImport(&amp;quot;USER32.DLL&amp;quot;, CharSet = CharSet.Unicode)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern IntPtr FindWindow(string lpClassName,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string lpWindowName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Activate an application window.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DllImport(&amp;quot;USER32.DLL&amp;quot;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern bool SetForegroundWindow(IntPtr hWnd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Adjunto el &lt;a target="_blank" href="https://skydrive.live.com/redir.aspx?cid=5959a78dae151305&amp;amp;resid=5959A78DAE151305!105&amp;amp;parid=5959A78DAE151305!107"&gt;c&amp;oacute;digo&lt;/a&gt;&amp;nbsp;y el &lt;a target="_blank" href="https://skydrive.live.com/redir.aspx?cid=5959a78dae151305&amp;amp;resid=5959A78DAE151305!106&amp;amp;parid=5959A78DAE151305!107"&gt;ejecutable&lt;/a&gt;&amp;nbsp;para probarlo, espero que os sea &amp;uacute;til!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202081" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /><category term="c#" scheme="http://geeks.ms/blogs/franotero/archive/tags/c_2300_/default.aspx" /><category term="DNI" scheme="http://geeks.ms/blogs/franotero/archive/tags/DNI/default.aspx" /></entry><entry><title>Asociar tabla a aspnet_users</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2011/06/14/asociar-tabla-a-aspnet-users.aspx" /><id>/blogs/franotero/archive/2011/06/14/asociar-tabla-a-aspnet-users.aspx</id><published>2011-06-14T07:45:00Z</published><updated>2011-06-14T07:45:00Z</updated><content type="html">&lt;p&gt;A pesar de no tener ninguna complicaci&amp;oacute;n especial, son muchos los programadores que utilizan enlaces no naturales para vincular tablas con el sistema de usuarios de &lt;strong&gt;ASP.NET&lt;/strong&gt;.&amp;nbsp; En la &lt;a href="http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx" title="jerarqu&amp;iacute;a de tablas instalada"&gt;jerarqu&amp;iacute;a de tablas instalada&lt;/a&gt;, la tabla de usuarios &lt;strong&gt;ASPNET_Users&lt;/strong&gt; tiene como clave primaria la columna &lt;strong&gt;UserId&lt;/strong&gt; y esa ser&amp;aacute; la columna que debamos de utilizar para enlazar con el resto de tablas. &lt;/p&gt;
&lt;p&gt;El problema es que esta columna es un &lt;strong&gt;GUID&lt;/strong&gt;, caracter&amp;iacute;stica que hace que nos pueda parecer poco id&amp;oacute;nea para utilizarla como clave for&amp;aacute;nea. Las alternativas que tenemos como claves candidatas en la tabla de usuarios es la combinaci&amp;oacute;n de &lt;strong&gt;&amp;#39;LoweredUserName&amp;#39;&lt;/strong&gt; y &lt;strong&gt;&amp;#39;ApplicationId&amp;#39;&lt;/strong&gt;. A&amp;uacute;n en el caso de que ignoremos &lt;strong&gt;&amp;#39;ApplicationId&amp;#39;&lt;/strong&gt; por utilizar la base de datos para una &amp;uacute;nica aplicaci&amp;oacute;n, el campo &lt;strong&gt;LoweredUserName&lt;/strong&gt; es de tipo &lt;strong&gt;varchar&lt;/strong&gt;(256), mucho mayor que un &lt;strong&gt;GUID&lt;/strong&gt; y desde luego mucho menos adecuado para utilizar como clave externa.&lt;/p&gt;
&lt;p&gt;Veamos un ejemplo b&amp;aacute;sico de como se personaliza un control &lt;strong&gt;CreateUserWizard&lt;/strong&gt; para a&amp;ntilde;adir informaci&amp;oacute;n personalizada en una tabla viculada con la estructura de Membership.&lt;/p&gt;
&lt;p&gt;1.- Dise&amp;ntilde;o de la tabla: la clave primaria coincide con el campo &lt;strong&gt;UserId&lt;/strong&gt; de &lt;strong&gt;ASPNET_Users.&lt;/strong&gt; En este sencillo ejemplo vamos a guardar el nombre, apellido y fecha de nacimiento.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_Tabla.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/0x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_Tabla.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.- A&amp;ntilde;adimos un paso m&amp;aacute;s al control para solicitar la informaci&amp;oacute;n adicional:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_ASPX.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/0x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_ASPX.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;3.- Controlamos la navegaci&amp;oacute;n en el primer paso del Wizard, que sigue siendo el paso de creaci&amp;oacute;n del usuario:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_CreatedUser.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_CreatedUser.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_CreatedUser2.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/0x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_CreatedUser2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.- Guardamos la informaci&amp;oacute;n adicional al finalizar el&amp;nbsp;asistente.&amp;nbsp;Evidentemente podemos utilizar cualquier tecnolog&amp;iacute;a de acceso a datos aunque para mayor claridad haya escogido la m&amp;aacute;s b&amp;aacute;sica.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_FinishButtonClick.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/0x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110614_5F00_FinishButtonClick.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;F&amp;iacute;jate que este c&amp;oacute;digo es independiente del proveedor del &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx" title="Membership Provider"&gt;Membership Provider&lt;/a&gt; que utilicemos, ya que la propiedad &lt;em&gt;ProviderUserKey&lt;/em&gt; devuelve un objeto con la clave primaria del proveedor. En nuestro caso esta clave primaria es el UserId de tipo Guid, para otros proveedores puede ser cualquier otra cosa. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196055" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author></entry><entry><title>Change Data Capture. Histórico de cambios en SQL Server 2008 R2</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2011/04/25/change-data-capture-hist-243-rico-de-cambios-en-sql-server-2008-r2.aspx" /><id>/blogs/franotero/archive/2011/04/25/change-data-capture-hist-243-rico-de-cambios-en-sql-server-2008-r2.aspx</id><published>2011-04-25T19:30:00Z</published><updated>2011-04-25T19:30:00Z</updated><content type="html">&lt;p&gt;SQL Server posee un mecanismo propio de traza de cambios DML y DDL que permite consultar versiones anteriores de una misma tabla, ver las modificaciones que ha sufrido durante un determinado espacio de tiempo, o un amplio espectro de modificaciones DDL de la propia tabla. &lt;/p&gt;
&lt;p&gt;Para ello no es&amp;nbsp; necesario crear ning&amp;uacute;n mecanismo externo, ni implementar complejas soluciones basadas en triggers: basta con habilitar CDC: &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc645937.aspx" title="Change Data Capture"&gt;Change Data Capture&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Habilitar CDC en la base de datos&lt;/li&gt;
&lt;li&gt;Habilitar CDC para la tabla correspondiente, puede habilitarse para todas las columnas o para columnas en particular&lt;/li&gt;
&lt;li&gt;Siempre que queramos utilizamos la consulta &lt;em&gt;cdc.fn_cdc_get_all_changes_nombreTabla &lt;/em&gt;para obtener los cambio realizados entre dos LSN determinados.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los pasos a seguir son muy sencillos, y pueden verse la demostraci&amp;oacute;n completa en el &lt;a target="_blank" href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Ejemplo.txt" title="c&amp;oacute;digo de ejemplo"&gt;c&amp;oacute;digo de ejemplo&lt;/a&gt;. Se trata de la creaci&amp;oacute;n de una tabla de ejemplo con columnas &lt;em&gt;IdProducto, Nombre, Precio, PrecioRebajado&lt;/em&gt;, donde despues de habilitar CDC se realizan tres inserciones, dos actualizaciones y un borrado. El resultado de consultar los cambios es una tabla como esta:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110425CDC.PNG"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110425CDC.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Las operaciones se ordenan por orden de ejecuci&amp;oacute;n, siendo la primera la m&amp;aacute;s antigua. Podemos observar tres primeros INSERT y un DELETE. En estos casos la informaci&amp;oacute;n que aparece es la insertada y la borrada de la tabla respectivamente.&lt;/p&gt;
&lt;p&gt;En el caso de UPDATE, se insertan dos filas por actualizaci&amp;oacute;n. La primera de ellas se corresponde con lo que hab&amp;iacute;a en la tabla antes del UPDATE y la segunda con lo que hay despu&amp;eacute;s. En esta operaci&amp;oacute;n tambi&amp;eacute;n es interesante consultar la columna &lt;em&gt;__$update_mask&lt;/em&gt;, que nos indica cu&amp;aacute;les han sido las columnas afectadas por la actulizaci&amp;oacute;n. Por ejemplo, 0x0A=0000 1010 indica que se han modificado la segunda y la cuarta, mientras que 0x02=0000 0010 indica que &amp;uacute;nicamente se ha visto afectada la segunda columna de la tabla.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=192954" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Autonumérico entre varias tablas</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2011/03/31/autonum-233-rico-entre-varias-tablas.aspx" /><id>/blogs/franotero/archive/2011/03/31/autonum-233-rico-entre-varias-tablas.aspx</id><published>2011-03-31T19:00:00Z</published><updated>2011-03-31T19:00:00Z</updated><content type="html">&lt;p&gt;Tenemos dos tablas de datos en SQL Server en las cuales se van a insertar filas indiscriminadamente. Necesitamos saber en qu&amp;eacute; orden fueron insertadas estas filas, poder sacar un UNION entre ambas tablas y ordenarla por su inserci&amp;oacute;n. Es necesario adem&amp;aacute;s detectar &amp;#39;huecos&amp;#39; en las filas, es decir, queremos crear un autonum&amp;eacute;rico pero que implique a ambas tablas. &lt;/p&gt;
&lt;p&gt;C&amp;oacute;mo sabemos, si utlizamos un campo integer la numeraci&amp;oacute;n es independiente en cada una de las tablas implicadas, as&amp;iacute; que no nos sirve. Un timestamp tampoco es la soluci&amp;oacute;n, ya que var&amp;iacute;a con cada versi&amp;oacute;n de la fila: cada update que hagamos sobre la fila actualizar&amp;aacute; a su vez la columna timestamp. &lt;/p&gt;
&lt;p&gt;La otra soluci&amp;oacute;n ser&amp;iacute;a utilizar como clave un campo fecha, lo cual nos solucionar&amp;iacute;a el problema de unir las dos tablas pero no el de la detecci&amp;oacute;n de huecos. No habr&amp;iacute;a forma a saber si entre dos filas de la tabla A hay alguna de la tabla B a no ser que hagamos la union directamente. &lt;/p&gt;
&lt;p&gt;Desde 2005 tenemos una soluci&amp;oacute;n a este problema: &lt;a href="http://msdn.microsoft.com/en-us/library/ms189786.aspx"&gt;newsequentialId()&lt;/a&gt;. Esta funci&amp;oacute;n s&amp;oacute;lo se puede utilizar como Default Constraint y nos devuelve un GUID distinto de cada vez, pero de forma secuencial.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110331NextGuid1.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20110331NextGuid1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En la imagen superior podemos ver el resultado de realizar dos inserciones en la tabla A, una en la B, y a continuaci&amp;oacute;n seguir insertando en la A. El byte menos significativo del GUID est&amp;aacute; representado por los dos primeros caracteres hexadecimales. C&amp;oacute;mo se puede ver, son secuenciales E7, E8, falta el E9 y continua con EA, EB... La serie es muy sencilla de predecir: ECD0, EDD0, EED0, EFD0, F0D0, F1D0, ..., FFD0, 00D1, 01D1 ,...&lt;/p&gt;
&lt;p&gt;Objetivo cumplido: orden, unicidad y densidad! El c&amp;oacute;digo de prueba para generar las tablas de ejemplo es el siguiente: &lt;/p&gt;
&lt;div class="Codigo"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;create&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;table&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;IdNum &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;identity&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;,&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;IdGuid &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;uniqueidentifier&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;default&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff00ff;font-size:x-small;"&gt;NEWSEQUENTIALID&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;()),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;50&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;create&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;table&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaB&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; IdNum &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;identity&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;,&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;IdGuid &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;uniqueidentifier&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;default&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff00ff;font-size:x-small;"&gt;NEWSEQUENTIALID&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;()),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;50&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;into&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;values &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;into&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;values &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;into&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaB&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;values &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;into&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;values &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;into&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;valor&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;values &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;select&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;*&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;from&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaA&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;select&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:x-small;"&gt;*&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;from&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; #TablaB&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=191394" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Examen de actualización a MCPD 40 Web Developer</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/11/03/examen-de-actualizaci-243-n-a-mcpd-40-web-developer.aspx" /><id>/blogs/franotero/archive/2010/11/03/examen-de-actualizaci-243-n-a-mcpd-40-web-developer.aspx</id><published>2010-11-03T14:40:00Z</published><updated>2010-11-03T14:40:00Z</updated><content type="html">&lt;p&gt;Ya est&amp;aacute; disponible la informaci&amp;oacute;n del examen de actualizaci&amp;oacute;n 70-523: &lt;a target="_blank" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-523"&gt;Updgrade transition your MCPD.NET Framework 3.5 Web Developer Skills to MCPD Framework 4 Web Developer&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Aunque la certificaci&amp;oacute;n se pudo obtener desde hace ya unos meses gracias a los ex&amp;aacute;menes beta, y desde el 22 de octubre est&amp;aacute; disponible en Prometric, no exist&amp;iacute;a hasta hoy ninguna p&amp;aacute;gina (p&amp;uacute;blica) donde se detallase el contenido de dicho examen.&lt;/p&gt;
&lt;p&gt;Ahora falta saber c&amp;oacute;mo est&amp;aacute; de acertado en nivel, porque si es de un nivel parecido al de certificaci&amp;oacute;n MCPD en 4.0 directo sale m&amp;aacute;s rentable empezar certific&amp;aacute;ndose en 3.5 y migrar con este &amp;uacute;nico examen a 4.0. La ruta directa para ser MCPD 4.0 consta de tres ex&amp;aacute;menes MCTS y un &amp;uacute;ltimo para ser MCPD. En cambio la ruta alternativa consta de dos ex&amp;aacute;mentes MCTS, uno para ser MCPD en 3.5 y un &amp;uacute;ltimo de transici&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;Son cuatro ex&amp;aacute;menes igual, pero de la forma alternativa tienes las certificaciones de 2008 y las de 2010, adem&amp;aacute;s de demostrar que eres capaz de aprobar el 70-536 y por tanto conoces los fundamentos de la plataforma. &lt;/p&gt;
&lt;p&gt;Cada uno que saque sus conclusiones!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=184296" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /><category term="c#" scheme="http://geeks.ms/blogs/franotero/archive/tags/c_2300_/default.aspx" /></entry><entry><title>Conversiones implícitas en SQL Server</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/10/25/conversiones-impl-237-citas-en-sql-server.aspx" /><id>/blogs/franotero/archive/2010/10/25/conversiones-impl-237-citas-en-sql-server.aspx</id><published>2010-10-25T21:46:00Z</published><updated>2010-10-25T21:46:00Z</updated><content type="html">&lt;p&gt;Una de las novedades que Sql Server 2008 trajo en su d&amp;iacute;a fue la capacidad de poder pasar listas de valores a una instrucci&amp;oacute;n &lt;i&gt;Insert Into&lt;/i&gt; sin tener que unirlos en una tabla mediante UNION. El siguiente c&amp;oacute;digo es totalmente correcto:&lt;/p&gt;
&lt;div class="Codigo"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;create&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;table&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#008080;font-size:small;"&gt;#pruebas&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="color:#008080;font-size:small;"&gt;idCargo&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;50&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;/span&gt;&lt;span style="color:#008080;font-size:small;"&gt;nombre&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;50&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;));&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;into&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#008080;font-size:small;"&gt;#pruebas&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;values&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;0&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_1&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;br /&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_2&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;br /&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_3&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;F&amp;iacute;jate que estamos insertando en una tabla con dos columnas tipo texto distintos valores, como son un n&amp;uacute;mero, un caracter y un texto sin contenido. El resultado es el siguiente:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/20100827_5F00_Select1.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Lo que nos deber&amp;iacute;a de preocupar de este resultado es la fila 3. Se puede observar que se ha convertido la cadena vac&amp;iacute;a a un 0, lo cual significa que &lt;span style="text-decoration:underline;"&gt;ha utilizado la conversi&amp;oacute;n impl&amp;iacute;cita&lt;/span&gt; desde varchar a integer. Este efecto puede tener consecuencias desastrosas, c&amp;oacute;mo en este otro ejemplo: &lt;/p&gt;
&lt;div class="Codigo"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;insert&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;into&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#008080;font-size:small;"&gt;#pruebas&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;values&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;0&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_1&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;br /&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_2&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;br /&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Persona_3&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Este &amp;quot;inocente&amp;quot; script hace que salte una excepci&amp;oacute;n &lt;span style="color:#ff0000;"&gt;&lt;b&gt;&lt;br /&gt;&amp;quot;Msg 245, Level 16, State 1, Line 3 Error de conversi&amp;oacute;n al convertir el valor varchar &amp;#39;a&amp;#39; al tipo de datos int.&amp;quot;&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;iexcl;&amp;iexcl;&amp;iexcl;Se est&amp;aacute; quejando de que no puede convertir el texto a n&amp;uacute;mero cuando estamos insertando textos en un campo de texto!!!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;El motivo es que en la primera fila estamos insertando un int, e internamente Sql Server va a tratar de crear una tabla para los tres valores con la estructura que define esa primera fila, en nuestro caso un entero en la primera columna y un varchar en la segunda :-(&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181725" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>ASP.NET Web Forms y los nuevos selectores CSS3</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/10/12/asp-net-web-forms-y-los-nuevos-selectores-css3.aspx" /><id>/blogs/franotero/archive/2010/10/12/asp-net-web-forms-y-los-nuevos-selectores-css3.aspx</id><published>2010-10-12T20:45:00Z</published><updated>2010-10-12T20:45:00Z</updated><content type="html">&lt;p&gt;Aunque no es en absoluto la mejor opci&amp;oacute;n, tengo observado en programadores de ASP.NET&amp;nbsp;el intento de incluir estilos en elementos busc&amp;aacute;ndolos por su identificador. Siempre ser&amp;aacute; una opci&amp;oacute;n menos mala que la de meter el estilo en l&amp;iacute;nea, pero no tan buena c&amp;oacute;mo utilizar clases CSS.&lt;/p&gt;
&lt;p&gt;En ASP.NET Web Forms nos encontramos con una barrera adicional:&lt;span style="text-decoration:underline;"&gt; no conocemos los identificadores de los elementos en tiempo de dise&amp;ntilde;o&lt;/span&gt;. Un ejemplo sencillo, incluyo una&lt;strong&gt; &amp;lt;asp:label id=&amp;quot;lblPrueba&amp;quot;&amp;gt;&lt;/strong&gt; dentro de un &amp;lt;asp:content&amp;gt; que a su vez utilizar&amp;aacute; una MasterPage, y el resultado final ser&amp;aacute; que dicho elemento se me renderiza c&amp;oacute;mo &lt;strong&gt;&amp;lt;span id=&amp;quot;MainContent_lblPrueba&amp;quot;&amp;gt;&lt;/strong&gt;. En ese caso si queremos&lt;span style="text-decoration:underline;"&gt; aplicar un estilo CSS a dicho elemento busc&amp;aacute;ndolo por id&lt;/span&gt;, tendremos que escribir el selector correspondiente para el id final, es decir, el que se enviar&amp;aacute; al navegador. Es evidente que un cambio en los contenedores del elemento puede dar al traste con esta feliz uni&amp;oacute;n entre CSS e Id del elemento. &lt;/p&gt;
&lt;p&gt;Aprovechando la circunstancia de que el identificador original que nosotros dimos al elemento &lt;span style="text-decoration:underline;"&gt;siempre aparece al final del identificador cliente &lt;/span&gt;podemos utilizar el nuevo selector de CSS3 para seleccionar lo que nos interesa. En este caso nos valdr&amp;iacute;a algo as&amp;iacute;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*[id$=lblPrueba]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;quot;estilos para la etiqueta lblPrueba&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Este selector viene diciendo: selecciona cualquier elemento (*) cuyo id termine en &amp;quot;lblPrueba&amp;quot;, con lo cual asunto zanjado.&lt;/p&gt;
&lt;p&gt;Puedes ampliar informaci&amp;oacute;n sobre este selector y otros parecidos &lt;a href="http://www.css3.info/preview/attribute-selectors/"&gt;en esta p&amp;aacute;gina&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=183236" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /><category term="css" scheme="http://geeks.ms/blogs/franotero/archive/tags/css/default.aspx" /></entry><entry><title>Intercambio de passwords en ASP.NET</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/09/27/intercambio-de-passwords-en-asp-net.aspx" /><id>/blogs/franotero/archive/2010/09/27/intercambio-de-passwords-en-asp-net.aspx</id><published>2010-09-27T08:15:00Z</published><updated>2010-09-27T08:15:00Z</updated><content type="html">&lt;p&gt;A veces para depurar nuestra aplicaci&amp;oacute;n necesitamos entrar &amp;quot;como si fu&amp;eacute;semos&amp;quot; otro usuario. Si utilizamos la seguridad de formularios de ASP.NET la informaci&amp;oacute;n de usuarios se guardar&amp;aacute; normalmente en una base de datos de SQLServer. Por seguridad la contrase&amp;ntilde;a de los usuarios no se guarda en la BBDD, sino que se guarda un hash que nos sirve para saber si el usuario ha metido la contrase&amp;ntilde;a correcta. &lt;/p&gt;
&lt;p&gt;La forma menos intrusiva y m&amp;aacute;s sencilla que tenemos de autenticarnos como otro usuario, es copiar nuestro password en el suyo. Para ello debemos de copiar dos campos de la tabla &lt;b&gt;aspnet_Membership&lt;/b&gt;: &lt;b&gt;Password&lt;/b&gt; y &lt;b&gt;PasswordSalt&lt;/b&gt;. Para encontrar cu&amp;aacute;l es el usuario tenemos tambi&amp;eacute;n que acceder a la tabla &lt;b&gt;aspnet_Users&lt;/b&gt;, en donde podemos buscarlo por &lt;b&gt;UserName&lt;/b&gt;. Y al acabar de hacer las pruebas estar&amp;iacute;a bien dejar todo como estaba, as&amp;iacute; que lo ideal ser&amp;iacute;a haber guardado la informaci&amp;oacute;n original en alg&amp;uacute;n sitio.&lt;/p&gt;
&lt;p&gt;El siguiente script hace todo esto por nosotros: intercambia la contrase&amp;ntilde;a de dos usuarios, definidos por sendos par&amp;aacute;metros al principio. De esta forma si quiero hacer una prueba en mi aplicaci&amp;oacute;n con el usuario &lt;b&gt;&amp;#39;admin&amp;#39;&lt;/b&gt;, basta con que ejecute el script, entre con mi contrase&amp;ntilde;a y el usuario &lt;b&gt;&amp;#39;admin&amp;#39; &lt;/b&gt;y finalmente vuelva a ejecutar el script para intercambiar de nuevo las contrase&amp;ntilde;as y dejar todo como estaba.&lt;/p&gt;
&lt;div class="Codigo"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;declare&lt;/span&gt;&lt;span style="font-size:small;"&gt; @Usuario1 &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;250&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Usuario2 &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="font-size:small;"&gt;250&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;--Datos de prueba&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select&lt;/span&gt;&lt;span style="font-size:small;"&gt; @Usuario1&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;miUsuario&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Usuario2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;admin&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;br /&gt;begin&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;tran&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Guardo la informacin del usuario1 y 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select&lt;/span&gt;&lt;span style="font-size:small;"&gt; U&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserName&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;Password&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;PasswordSalt &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;into&lt;/span&gt;&lt;span style="font-size:small;"&gt; #infoUsuario&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from&lt;/span&gt;&lt;span style="font-size:small;"&gt; aspnet_Users U&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;inner&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;join&lt;/span&gt;&lt;span style="font-size:small;"&gt; aspnet_Membership M&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;on&lt;/span&gt;&lt;span style="font-size:small;"&gt; U&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;and&lt;/span&gt;&lt;span style="font-size:small;"&gt; U&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;M&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;where&lt;/span&gt;&lt;span style="font-size:small;"&gt; U&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserName&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Usuario1 &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;or&lt;/span&gt;&lt;span style="font-size:small;"&gt; U&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserName&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Usuario2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Intercambio las informaciones&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;update&lt;/span&gt;&lt;span style="font-size:small;"&gt; aspnet_Membership &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;set&lt;/span&gt;&lt;span style="font-size:small;"&gt; [Password]&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;n&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;[Password]&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt; PasswordSalt&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;n&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;PasswordSalt&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;--Consulta que hace el verdadero swap&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select&lt;/span&gt;&lt;span style="font-size:small;"&gt; A&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserName&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt; A&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;A&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;B&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;Password&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;B&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;PasswordSalt &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/span&gt;&lt;span style="font-size:small;"&gt; #infoUsuario A&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;span style="font-size:small;"&gt;#infoUsuario B&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;where&lt;/span&gt;&lt;span style="font-size:small;"&gt; A&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;B&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;)&lt;/span&gt;&lt;span style="font-size:small;"&gt; n&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;where&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aspnet_Membership&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;n&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;ApplicationId &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;and&lt;/span&gt;&lt;span style="font-size:small;"&gt; aspnet_Membership&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;span style="font-size:small;"&gt;N&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;"&gt;UserId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Borrado de la tabla temporal&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff00ff;font-size:small;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;tempdb..#infoUsuario&amp;#39;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;)&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;is&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;not&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;null)&lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#008000;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;drop&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;table&lt;/span&gt;&lt;span style="font-size:small;"&gt; #infoUsuario&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;commit&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;tran&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;F&amp;iacute;jate que la base de datos de membership puede ser compartida por varias aplicaciones de asp.net, de ah&amp;iacute; que introduzca en la consulta el campo ApplicationId. Si tienes esta informaci&amp;oacute;n en tu base de datos exclusiva para la aplicaci&amp;oacute;n puedes obviar esta condici&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Sencillo, no?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181724" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Doodle K</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/09/10/doodle-k.aspx" /><id>/blogs/franotero/archive/2010/09/10/doodle-k.aspx</id><published>2010-09-10T15:50:00Z</published><updated>2010-09-10T15:50:00Z</updated><content type="html">&lt;p&gt;Estos d&amp;iacute;as est&amp;aacute; todo el mundo conjeturando acerca de las intenciones y significados de los &amp;uacute;ltimos doodels. M&amp;aacute;s all&amp;aacute; de sus motivos (supongo que hacer ruido) el efecto es cu&amp;aacute;nto menos curioso y muy sencillo de replicar:&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;iframe scrolling="no" width="700" src="http://geeks.ms/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Krasis.txt" height="200" style="width:700px;height:258px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;&amp;iquest;Cu&amp;aacute;l es el truco? No hay Flash, ni Silverlight ni nada complicado detr&amp;aacute;s de este efecto: simplemente tenemos dos divs con su background establecido a la misma imagen, una de ellas en color y la otra en gris. El &amp;uacute;nico truco de este efecto es una funci&amp;oacute;n de javascript que responde al evento &lt;em&gt;onkeyup(this.value.length)&lt;/em&gt; que env&amp;iacute;a el n&amp;uacute;mero de caracteres del cuadro de texto para redimensionar el div que contiene la imagen en color.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;br /&gt;&lt;/div&gt;
&lt;div class="Codigo"&gt;function SetFrontWidth(value)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var div1=document.getElementById(&amp;#39;divK&amp;#39;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var longitud=Math.round(700*value/6);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(longitud&amp;gt;580)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; longitud-=20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; div1.style.width=longitud;&lt;br /&gt;}&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;Para m&amp;aacute;s detalle&amp;nbsp;se puede bajar el c&amp;oacute;digo&amp;nbsp;completo de&lt;a target="_blank" href="http://geeks.ms/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Krasis.txt" title="este ejemplo"&gt; este ejemplo&lt;/a&gt;&amp;nbsp;(no utiliza css ni c&amp;oacute;digo externo alguno). &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181722" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="javascript" scheme="http://geeks.ms/blogs/franotero/archive/tags/javascript/default.aspx" /></entry><entry><title>¿Por qué cambiar IsNull por Coalesce?</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/09/09/Porqu_E900_-cambiar-isnull-por-coalesce.aspx" /><id>/blogs/franotero/archive/2010/09/09/Porqu_E900_-cambiar-isnull-por-coalesce.aspx</id><published>2010-09-09T19:00:00Z</published><updated>2010-09-09T19:00:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;IsNull&lt;/strong&gt; es la funci&amp;oacute;n de Sql Server que la mayor&amp;iacute;a de los programadores que llevan unos a&amp;ntilde;os escribiendo consultas utilizan. Su funci&amp;oacute;n es devolver un valor por defecto si el primer argumento pasado es nulo. &lt;/p&gt;
&lt;p&gt;Por ejemplo, supongamos que tenemos la siguiente tabla: &lt;/p&gt;
&lt;div class="Codigo"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;declare &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Clientes &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;table &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Id &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Nombre &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;100&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;));&lt;/span&gt;&lt;/span&gt; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;Y queremos actualizar un campo determinado, por ejemplo el Id=2, para que el nombre coincida con un par&amp;aacute;metro que nos pasar&amp;aacute;n desde programa. Entonces la consulta a ejecutar ser&amp;iacute;a tan sencilla como esta: &lt;/p&gt;
&lt;div style="background:lightgray;"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;update&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; @Clientes &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Nombre &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; @NuevoNombre &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Id&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ahora&amp;nbsp; queremos mejorar nuestra consulta, de forma que si el par&amp;aacute;metro &lt;strong&gt;@NuevoNombre&lt;/strong&gt; es nulo la fila no se actualice y mantenga su valor. Entonces podr&amp;iacute;amos substituir la segunda l&amp;iacute;nea por cualquiera de estas dos opciones: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a) set Nombre=IsNull(@NuevoNombre,Nombre);&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b) set Nombre=Coalesce(@NuevoNombre,Nombre)&lt;/em&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;Siempre que el par&amp;aacute;metro est&amp;eacute; correctamente definido ambas consultas se comportar&amp;aacute;n igual. El problema viene cuando el par&amp;aacute;metro (por ejemplo por utilizar inferencia en el sistema de origen) viene con una definici&amp;oacute;n distinta. Imaginemos por ejemplo que definimos as&amp;iacute; el par&amp;aacute;metro y ejecutamos la consulta:&lt;/p&gt;
&lt;div style="background:lightgray;"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;declare &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;@NuevoNombre &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;)= null;&lt;/span&gt;&lt;/span&gt; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;En el update con calesce el resultado es el esperado, mientras que en el caso de IsNull, la tabla se actualizar&amp;aacute; incorrectamente. Esto es debido a que realmente IsNull no devuelve el segundo par&amp;aacute;metro, sino el resultado de convertir el valor del segundo par&amp;aacute;metro al tipo del primero, lo cual consituye una diferencia fundamental.&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n listamos el c&amp;oacute;digo completo para copiar y pegar y demostrar el funcionamiento. Basta con descomentar alternativamente uno u otro UPDATE para comparar los resultados. &lt;/p&gt;
&lt;div style="background:lightgray;"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;declare &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;@Clientes &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;table &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Id &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Nombre &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;100&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;insert &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;into&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; @Clientes&lt;/span&gt; &lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;values &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Francisco Otero&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;),&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&lt;span style="color:#ff0000;font-size:small;"&gt;&amp;#39;Otro fulano&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;declare &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;@NuevoNombre &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;2&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;)=null;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#008000;font-size:small;"&gt;&lt;span style="color:#008000;font-size:small;"&gt;--update @Clientes &lt;br /&gt;--set Nombre= @NuevoNombre &lt;br /&gt;--where Id=2&lt;br /&gt;&lt;br /&gt;--update @Clientes &lt;br /&gt;--set Nombre=Coalesce(@NuevoNombre,Nombre) &lt;br /&gt;--where Id=1 &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; @Clientes&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180901" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Common Table Expression simple</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/08/26/lo-que-todos-deberiamos-saber-de-las-ctes.aspx" /><id>/blogs/franotero/archive/2010/08/26/lo-que-todos-deberiamos-saber-de-las-ctes.aspx</id><published>2010-08-26T21:15:00Z</published><updated>2010-08-26T21:15:00Z</updated><content type="html">&lt;p&gt;Las CTE o &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms190766.aspx" title="Common Table Expression"&gt;Common Table Expression&lt;/a&gt;&amp;nbsp;son expresiones que facilitan la labor de escribir consultas complicadas, permitiendo definir subconsultas previas como tablas que se utilizar&amp;aacute;n en la consulta. Suena complicado, y realmente a veces lo es: las CTE pueden incluso ser recursivas y hacer consultas que ni te imaginabas que se pudiesen conseguir en una sola consulta (queda pendiente para otro post). Pero conocer y saber utilizar CTE b&amp;aacute;sicas nos puede ayudar a mejorar nuestras consultas de forma muy sencilla. Ese es el caso de este ejemplo.&lt;/p&gt;
&lt;p&gt;En la base de datos AdventureWorks existe una tabla con hist&amp;oacute;ricos de precios de productos.&lt;/p&gt;
&lt;div style="background:#ddd;"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Production&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;ProductCostHistory&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;order&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;by&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; ProductID &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;asc&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;StartDate &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;asc&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;/span&gt;&lt;/span&gt; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Que da como resultado una tabla como esta:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Select.PNG"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Select.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Queremos hacer una consulta que nos devuelva el primer precio que tuvo asignado cada producto, es decir, para el producto 707 tendr&amp;iacute;a que devolver la prima fila, que se corresponde con el a&amp;ntilde;o 2001 y un precio de 12,0278. Lo primero que se nos puede venir a la cabeza ser&amp;aacute; un GROUP BY, pero os adelanto que no va a salir bien :-). Mediante una agrupaci&amp;oacute;n podr&amp;iacute;amos saber la primera fecha para cada productId, pero: &amp;iquest;y el precio? Tendr&amp;iacute;amos que hacer un InnerJoin posterior que utilizase este resultado: se complica mucho m&amp;aacute;s si metemos m&amp;aacute;s campos debido a que en el&amp;nbsp;JOIN vamos a tener que igualar todos los campos para asegurarnos de que estamos seleccionando la misma fila.&lt;/p&gt;
&lt;p&gt;La soluci&amp;oacute;n&amp;nbsp;con CTE quedar&amp;iacute;a as&amp;iacute;:&lt;/p&gt;
&lt;div style="background:#ddd;"&gt;&lt;code&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;with &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Ampliada&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;ProductId&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;StandardCost&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Indice&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;&amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&gt;ProductID &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;StandardCost&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff00ff;font-size:small;"&gt;&lt;span style="color:#ff00ff;font-size:small;"&gt;RANK&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;over&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;partition&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;by&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; ProductId &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;order&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;by&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; StartDate&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; Indice&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Production&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;ProductCostHistory&lt;/span&gt; &lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;select &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;from &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Ampliada&lt;/span&gt; &lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;where &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Indice&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;font-size:small;"&gt;&lt;span style="color:#808080;font-size:small;"&gt;;&lt;/span&gt;&lt;/span&gt; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Como ves la CTE crea una tabla previa, en este caso llamada &amp;quot;Ampliada&amp;quot; que podemos utilizar en la consulta siguiente (realmente es la misma consulta). Aqu&amp;iacute; el &amp;uacute;nico truco es el campo &amp;iacute;ndice que est&amp;aacute; constru&amp;iacute;do a partir de la funci&amp;oacute;n&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/ms176102(SQL.90).aspx" title="Rank"&gt; Rank()&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181104" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Candlestick para traders con SqlServer</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2010/08/19/candlestick-para-traders-con-sqlserver.aspx" /><id>/blogs/franotero/archive/2010/08/19/candlestick-para-traders-con-sqlserver.aspx</id><published>2010-08-19T20:44:00Z</published><updated>2010-08-19T20:44:00Z</updated><content type="html">&lt;p&gt;Creo que el t&amp;iacute;tulo no puede ser m&amp;aacute;s descriptivo: un art&amp;iacute;culo publicado esta semana en ScribD en el que comento algunas t&amp;eacute;cnicas &amp;uacute;tiles para an&amp;aacute;lisis burs&amp;aacute;til utilizando consultas de Sql Server. &amp;Uacute;nicamente con consultas de Sql Server conseguimos detectar patrones de velas japonesas que indican comienzos o finales de tendencias, proporcionando un apoyo a la decisi&amp;oacute;n de inversi&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.scribd.com/doc/35646742/Candlestick-para-traders-con-SQL-Server" title="Canlestick para traders con Sql Server"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/Portada.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/franotero/LuceroAlba.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Publico en la &lt;a target="_blank" href="http://geeks.ms/media/p/180897.aspx" title="zona de medios"&gt;zona de medios&lt;/a&gt; la base de datos real que utilizo en el art&amp;iacute;culo. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180898" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Fila a fila sin cursores II: SELECT simple</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/12/16/fila-a-fila-sin-cursores-ii-update-simple.aspx" /><id>/blogs/franotero/archive/2009/12/16/fila-a-fila-sin-cursores-ii-update-simple.aspx</id><published>2009-12-16T22:15:00Z</published><updated>2009-12-16T22:15:00Z</updated><content type="html">&lt;p&gt;Para los que les haya gustado mi &lt;a target="_blank" href="http://geeks.ms/blogs/franotero/archive/2009/12/04/fila-a-fila-sin-cursores-columna-agregado.aspx" title="anterior art&amp;iacute;culo"&gt;anterior art&amp;iacute;culo&lt;/a&gt; en el cual substituiamos el uso de cursores por un bucle While, aqu&amp;iacute; est&amp;aacute; la continuaci&amp;oacute;n DEFINITIVA. Supongo que muchos pensareis que no ganamos mucho substituyendo una iteraci&amp;oacute;n por la otra, y en parte ten&amp;eacute;is raz&amp;oacute;n. No obstante la no utilizaci&amp;oacute;n de cursores tiene beneficios intr&amp;iacute;nsecos que van m&amp;aacute;s all&amp;aacute; del propio rendimiento de la consulta, como podr&amp;iacute;a ser&amp;nbsp;la seguridad ante fallos de que no tendremos objetos instanciados en memoria. &lt;/p&gt;
&lt;p&gt;De todas formas viendo el c&amp;oacute;digo anterior uno se queda con la sensaci&amp;oacute;n de que es un poco rudimentario. Hay otras alternativasparecidas, como puede ser incluir en la tabla temporal una columna IDENTITY que nos permita iterar la tabla en el While a trav&amp;eacute;s de una variable puntero que iremos incrementando en el propio While: m&amp;aacute;s de lo mismo. Ahora bien, que os parecer&amp;iacute;a si os digo que se puede substituir todo el bucle, el recorrido de filas, la comparaci&amp;oacute;n e incluso la tabla temporal por una &amp;uacute;nica instrucci&amp;oacute;n SELECT &amp;quot;corriente&amp;quot;. Lo de corriente tiene un poco de trampa, pero nada de complicaci&amp;oacute;n: si utilizamos una instrucci&amp;oacute;n select de asignaci&amp;oacute;n, la asignaci&amp;oacute;n se repetir&amp;aacute; para cada fila de la consulta. Si adem&amp;aacute;s introducimos una expresi&amp;oacute;n de tipo &amp;quot;case ... then .... else ..... end&amp;quot; podemos en cada fila comparar el valor m&amp;aacute;ximo con el que llevamos agregado y asignar al m&amp;aacute;ximo el mayor de ellos. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;--&amp;nbsp;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Creamos la tabla del ejemplo. Para simplificar introducimos solo los &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;em&gt;--datos que utilizaremos, pero esto no afecta al ejemplo&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;declare&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;as&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;table &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Producto &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;nvarchar&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;10&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;),&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; Cantidad &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;int&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; Fecha &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;date&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;500&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090101&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,-&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;200&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090104&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,-&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;50&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090102&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,-&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;220&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090110&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;500&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090111&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;into&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @movimientos &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;values &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,-&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;100&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;20090120&amp;#39;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;em&gt;--Variables auxiliares que utilizaremos&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;declare&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @Acc &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;int&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;,&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Max &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:9pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;int set&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @Acc&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;0 &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;--Valor acumulado hasta la fila actual&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;set&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @Max&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;0 &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;--Valor m&amp;aacute;ximo hasta la fila actual&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;em&gt;-- Consulta &amp;quot;importante&amp;quot;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;select&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:9pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Acc&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Acc&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;+&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Cantidad&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;, &lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;--Valor acumulado hasta la fila actual&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Max&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;case&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:fuchsia;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;sign&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Acc&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Max&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;when&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; 1 &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;then&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @Acc &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;else&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; @Max &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;end&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;--Asigna el nuevo m&amp;aacute;ximo o se queda con el que hab&amp;iacute;a&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:green;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;From &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@movimientos &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Where &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Producto&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:9pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;orderby&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; fecha &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;asc&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;print &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;#39;M&amp;aacute;ximo alcanzado:&amp;#39;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;print &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;@Max&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;
&lt;p&gt;--&amp;nbsp;H&amp;eacute;chale una pensada, puede ser muy &amp;uacute;til !!!!&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=162738" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>Fila a fila sin cursores: columna agregado</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/12/04/fila-a-fila-sin-cursores-columna-agregado.aspx" /><id>/blogs/franotero/archive/2009/12/04/fila-a-fila-sin-cursores-columna-agregado.aspx</id><published>2009-12-03T23:39:00Z</published><updated>2009-12-03T23:39:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:1pt;mso-ansi-language:ES;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Tenemos una tabla en nuestra base de datos llamada &amp;ldquo;Movimientos&amp;rdquo;, que registra entradas y salidas de material de nuestro almac&amp;eacute;n. La siguiente consulta es el resultado de consultar los movimientos de &amp;ldquo;tornillos&amp;rdquo; en el mes de enero. C&amp;oacute;mo se puede ver la tabla carece de un autonum&amp;eacute;rico, los registros no tienen porqu&amp;eacute; estar en orden cronol&amp;oacute;gico y hay m&amp;aacute;s productos mezclados.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table width="203" cellpadding="0" cellspacing="0" border="0" class="MsoNormalTable" style="margin:auto auto auto -0.75pt;width:152pt;border-collapse:collapse;mso-padding-alt:0cm 3.5pt 0cm 3.5pt;mso-yfti-tbllook:1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height:15pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;01/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:1;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-50&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;02/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:2;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-200&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;04/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:3;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-220&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;10/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:4;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;11/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-100&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;20/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Si en este escenario nos pidiesen obtener la cantidad m&amp;aacute;xima de tornillos que lleg&amp;oacute; a haber en el almac&amp;eacute;n podr&amp;iacute;an ponernos en un peque&amp;ntilde;o apuro. La idea ser&amp;iacute;a conseguir una tercera columna con la cantidad en stock y poder seleccionar el m&amp;aacute;ximo. El problema de eso es que necesitamos de alguna manera recorrer la tabla fila a fila, pero claro, dicen por ah&amp;iacute; que eso de los cursores es cosa mala&amp;hellip;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table width="267" cellpadding="0" cellspacing="0" border="0" class="MsoNormalTable" style="margin:auto auto auto -0.75pt;width:200pt;border-collapse:collapse;mso-padding-alt:0cm 3.5pt 0cm 3.5pt;mso-yfti-tbllook:1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height:15pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;01/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:1;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-50&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;02/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;450&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:2;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-200&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;04/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;250&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:3;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-220&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;10/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:4;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;11/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;530&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;tornillos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;-100&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="75" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:56pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;20/01/2009&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="64" valign="bottom" style="padding-bottom:0cm;background-color:transparent;padding-left:3.5pt;width:48pt;padding-right:3.5pt;height:15pt;padding-top:0cm;border:#f0f0f0;"&gt;
&lt;p class="MsoNormal" align="right"&gt;&lt;span style="color:black;mso-bidi-font-size:11.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;430&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;He aqu&amp;iacute; un m&amp;eacute;todo alternativo a la utilizaci&amp;oacute;n de los cursores para obtener la columna &amp;ldquo;agregado&amp;rdquo; y poder seleccionar el m&amp;aacute;ximo stock, que tiene lugar el 11 de enero con un valor de 530 tornillos.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;1&amp;ordm;) Creamos una tabla temporal con los registros que nos interesan, orden&amp;aacute;ndolos por orden cronol&amp;oacute;gico&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;2&amp;ordm;) Recorremos un bucle que analice la primera fila y la eliminamos, de esta forma podemos recorrer la tabla completa.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Ve&amp;aacute;moslo en el ejemplo: &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Creamos la tabla del ejemplo. Para simplificar introducimos solo los &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--datos que utilizaremos, pero esto no afecta al ejemplo&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;declare&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; @movimientos &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:blue;"&gt;table&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;(&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;Producto &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;),&lt;/span&gt; Cantidad &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; Fecha &lt;span style="color:blue;"&gt;date&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;500&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090101&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,-&lt;/span&gt;200&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090104&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,-&lt;/span&gt;50&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090102&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,-&lt;/span&gt;220&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090110&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;500&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090111&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @movimientos &lt;span style="color:blue;"&gt;values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,-&lt;/span&gt;100&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;20090120&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Definimos una tabla temporal, con la misma estructura que la original&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;declare&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; @tmp &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:blue;"&gt;table&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:10pt;mso-no-proof:yes;"&gt;(&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;Producto &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;),&lt;/span&gt; Cantidad &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; Fecha &lt;span style="color:blue;"&gt;date&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Introducimos aqu&amp;iacute; los datos que nos interesen, ordenados convenientemente&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;insert&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @tmp&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; &lt;span style="color:gray;"&gt;*&lt;/span&gt; &lt;span style="color:blue;"&gt;from&lt;/span&gt; @movimientos &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;where&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; Producto&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tornillos&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;order&lt;/span&gt; &lt;span style="color:blue;"&gt;by&lt;/span&gt; fecha &lt;span style="color:blue;"&gt;asc&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Variables auxiliares que utilizaremos&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;declare&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; @Acc &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;@Max &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;set&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; @Acc&lt;span style="color:gray;"&gt;=&lt;/span&gt;0 &lt;span style="color:green;"&gt;--Valor acumulado hasta la fila actual&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;set&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; @Max&lt;span style="color:gray;"&gt;=&lt;/span&gt;0 &lt;span style="color:green;"&gt;--Valor m&amp;aacute;ximo hasta la fila actual&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Esta instrucci&amp;oacute;n elimina de la ventana de mensajes el recuento de filas afectadas&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;set&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;nocount&lt;/span&gt; &lt;span style="color:blue;"&gt;on&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Mientras exista alguna fila en @tmp recorro el bucle&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;While&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;(Exists(&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;select&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:gray;"&gt;*&lt;/span&gt; &lt;span style="color:blue;"&gt;from&lt;/span&gt; @tmp&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;BEGIN&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;--Sumamos la 1&amp;ordf;fila al acumulado&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;select&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;top&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt; @Acc&lt;span style="color:gray;"&gt;=&lt;/span&gt;@Acc&lt;span style="color:gray;"&gt;+&lt;/span&gt;Cantidad &lt;span style="color:blue;"&gt;from&lt;/span&gt; @tmp&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:green;font-size:10pt;mso-no-proof:yes;"&gt;--Eliminamos la 1&amp;ordf; fila; ya est&amp;aacute; computada&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;delete&lt;/span&gt; &lt;span style="color:blue;"&gt;top&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;from&lt;/span&gt; @tmp&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;--Comprobamos si el acumulado es m&amp;aacute;ximo&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@Acc&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;@Max&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;set&lt;/span&gt; @Max&lt;span style="color:gray;"&gt;=&lt;/span&gt;@Acc&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;print&lt;/span&gt; @Acc&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;print&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;print&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;&amp;#39;M&amp;aacute;ximo alcanzado:&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;print&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; @Max&lt;/span&gt;&lt;/i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Lo que nos devuelve por pantalla la columna de acumulados y el m&amp;aacute;ximo stock que lleg&amp;oacute; a haber en el almac&amp;eacute;n:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;500&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;450&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;250&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;30&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;530&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;430&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;M&amp;aacute;ximo alcanzado:&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;mso-no-proof:yes;"&gt;530&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;La pega de este m&amp;eacute;todo son la cantidad de deletes que utiliza, as&amp;iacute; que en el siguiente post tocar&amp;aacute; un m&amp;eacute;todo alternativo (sin cursores, of course) m&amp;aacute;s eficaz.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161890" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry><entry><title>El atributo 'for' en ASP.NET: AssociatedControlId</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/10/18/el-atributo-for-en-asp-net-associatedcontrolid.aspx" /><id>/blogs/franotero/archive/2009/10/18/el-atributo-for-en-asp-net-associatedcontrolid.aspx</id><published>2009-10-18T12:35:00Z</published><updated>2009-10-18T12:35:00Z</updated><content type="html">&lt;p&gt;A vueltas con esto de hacer una aplicaci&amp;oacute;n accesible y est&amp;aacute;ndar con ASP.NET me encontr&amp;eacute; con un detalle aparentemente trivial: c&amp;oacute;mo generar un formulario est&amp;aacute;ndar. Vale, utilizando un control de datos el problema &amp;quot;se resuelve solo&amp;quot;, pero si pienso&amp;nbsp;en un par de etiquetas con cuadros de texto para recolectar datos de forma sencilla supongo que todo el mundo pensar&amp;iacute;a en algo como esto: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;asp:label runat=&amp;quot;server&amp;quot; Text=&amp;quot;Nombre: &amp;quot;&amp;nbsp;&amp;gt; &amp;lt;asp:textbox runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;...etc,etc&lt;/p&gt;
&lt;p&gt;Lo cual nos genar&amp;aacute; un aparente formulario, pero cuyos textos est&amp;aacute;n en un span. &amp;iquest;Qu&amp;eacute; implicaciones tiene esto? Pues por ejemplo, que el span es un elemento inline por defecto, y nos costar&amp;aacute; un poquito m&amp;aacute;s formatearlo con css, a parte de que los textos no estar&amp;aacute;n asociados a los cuadros de texto correspondientes con lo cual la accesibilidad se ver&amp;aacute; mermada. La primera soluci&amp;oacute;n que se nos ocurre supongo que ser&amp;aacute;, &amp;iquest;porqu&amp;eacute; un control de asp.net para la etiqueta? Es cierto, si substituyo el control asp.label por un label html normal con el atributo &amp;quot;for&amp;quot; establecido al id del cuadro de texto asunto resuelto!. &lt;/p&gt;
&lt;p&gt;&amp;iquest;Pero qu&amp;eacute; ocurre si estas etiquetas han de ser accedidas desde servidor? &amp;iquest;O simplemente si la p&amp;aacute;gina ha de ser localizable? Hay soluci&amp;oacute;n para todo, pero lo c&amp;oacute;modo ser&amp;iacute;a poder utilizar el c&amp;oacute;digo mostrado al principio indic&amp;aacute;ndole que se renderizase como &amp;lt;label&amp;gt; en lugar de hacerlo como &amp;lt;span&amp;gt; y se estableciese el atributo &amp;quot;for&amp;quot; al id que se le asigne al control &amp;lt;input&amp;gt; que generar&amp;aacute; el control textbox. Pues bien, eso es exactamente lo que se consigue con el atributo AssociatedControlId:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&amp;lt;asp:label runat=&amp;quot;server&amp;quot; Text=&amp;quot;Nombre: &amp;quot; AssociatedControlId=&amp;quot;tbxNombre&amp;quot;&amp;nbsp;&amp;gt; &amp;lt;asp:textbox runat=&amp;quot;server&amp;quot; ID=&amp;quot;tbxNombre&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Sencillo, pero hay que saberlo!!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=157233" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author></entry><entry><title>Set SelectedValue in DataList</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/09/20/set-selectedvalue-in-datalist.aspx" /><id>/blogs/franotero/archive/2009/09/20/set-selectedvalue-in-datalist.aspx</id><published>2009-09-20T10:10:00Z</published><updated>2009-09-20T10:10:00Z</updated><content type="html">&lt;p&gt;Otra de esas peque&amp;ntilde;as cosas que nos puede hacer perder el tiempo. Queremos cargar un Datalist con una lista de items, en el caso del ejemplo im&amp;aacute;genes, y hacer que una de ellas aparezca seleccionada. Si recorremos los m&amp;eacute;todos y propiedades disponibles en este control, nos daremos cuenta de que la &amp;uacute;nica forma de seleccionar por c&amp;oacute;digo un elemento es estableciendo la propiedad SelectedIndex. Existe la propiedad SelectedValue, pero es &amp;uacute;nicamente de lectura. Por desgracia, el &amp;iacute;ndice no suele ser lo m&amp;aacute;s recomendable para identificar a un elemento, as&amp;iacute; que en este ejemplo vamos a ver c&amp;oacute;mo hacer que este mismo control permita establecer su SelectedValue. &lt;/p&gt;
&lt;p&gt;Se trata de un &lt;a href="http://fjaumot.wordpress.com/2008/10/27/metodos-extensores-en-c/"&gt;m&amp;eacute;todo extensor&lt;/a&gt; que recorrer&amp;aacute; los elementos de la colecci&amp;oacute;n buscando coincidencias de clave, y una vez encontrada selecciona el elemento por su &amp;iacute;ndice. Fijaos en que la dificultad reside en que la lista de claves no est&amp;aacute; indexada, con lo cual la tenemos que recorrer en un foreach y llevar la cuenta del &amp;iacute;ndice &amp;quot;a pelo&amp;quot;. &lt;/p&gt;
&lt;p&gt;&amp;nbsp; public static void SetSelectedValue(this DataList dataList,String value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dataList.Items.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Object key in dataList.DataKeys)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {//Recorremos las claves, llevando el &amp;iacute;ndice en la vble i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value ==&amp;nbsp; key.ToString())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {//Elemento a seleccionar, fin del m&amp;eacute;todo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataList.SelectedIndex = i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como siempre, espero que a alguien m&amp;aacute;s le resulte &amp;uacute;til ;-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155623" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author></entry><entry><title>FileUpload dentro de UpdatePanel</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/09/07/fileupload-dentro-de-updatepanel.aspx" /><id>/blogs/franotero/archive/2009/09/07/fileupload-dentro-de-updatepanel.aspx</id><published>2009-09-07T16:25:00Z</published><updated>2009-09-07T16:25:00Z</updated><content type="html">&lt;p&gt;Sabido es que ciertos controles no funcionan correctamente dentro de un UpdatePanel. Es el caso de los Treeview, men&amp;uacute;, gridview o detailsView entre &lt;a target="_blank" title="otros" href="http://msdn.microsoft.com/en-us/library/bb386454.aspx"&gt;otros&lt;/a&gt;. Algunos de estos no funcionan bajo determinadas circunstancias, o simplemente quedan totalmente invalidados. A este &amp;uacute;ltimo grupo pertenece el control FileUpload, que nos&amp;nbsp; permite subir archivos al servidor.&lt;/p&gt;
&lt;p&gt;Buscando por ah&amp;iacute;, se encuentran varias soluciones, (destacar&amp;iacute;a la de &lt;a title="Issaac Fern&amp;aacute;ndez" href="http://geeks.ms/blogs/ifernandez/archive/2009/02/02/fileupload-con-updatepanel.aspx"&gt;Isaac Fern&amp;aacute;ndez&lt;/a&gt; en este mismo site), la mayor&amp;iacute;a enfocadas a la situaci&amp;oacute;n sencilla de que el control fileUpload est&amp;eacute; situado directamente dentro del update panel. En este caso basta con agregar a la lista de triggers del UpdatePanel un nuevo PostBackTrigger con el ControlId apuntando al bot&amp;oacute;n de subir archivo de nuestro FileUpload.&lt;/p&gt;
&lt;p&gt;El problema de esta soluci&amp;oacute;n viene cuando la arquitectura se complica y tenemos, por ejemplo, el fileUpload dentro de un control de usuario propio, que a su vez ser&amp;aacute; utilizado en p&amp;aacute;ginas con varias MasterPage anidadas y el UpdateManager se encuentra en la primera de dichas MasterPages (suena rebuscado as&amp;iacute; contado, pero no estoy inventando nada :-)) Est&amp;aacute; claro que no podemos referirnos directamente desde el ASCX al UpdateManager (de forma sencilla, se entiende) ni viceversa. En este caso la soluci&amp;oacute;n ser&amp;iacute;a tan simple como crear el PostBackTrigger referido a nuestro bot&amp;oacute;n desde c&amp;oacute;digo, para lo cual necesitamos obtener el ScriptManager que se est&amp;aacute; utilizando en la p&amp;aacute;gina actual. El siguiente c&amp;oacute;digo muestra c&amp;oacute;mo hacerlo:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;i&gt;&amp;nbsp;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void
Page_Load(object sender, EventArgs e)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ScriptManager scripManager = ScriptManager.GetCurrent(this.Page);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scripManager.RegisterPostBackControl(lnkNuevaImagen);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Asunto resuelto, nos cargamos la funcionalidad as&amp;iacute;ncrona para este bot&amp;oacute;n, pero aseguramos que funciona con s&amp;oacute;lo incluir dos l&amp;iacute;neas de c&amp;oacute;digo f&amp;aacute;cilmente entendibles. &lt;/p&gt;
&lt;p&gt;Espero que a alguien m&amp;aacute;s le sirva!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155424" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Capturar punto de google maps</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/06/10/capturar-punto-de-google-maps.aspx" /><id>/blogs/franotero/archive/2009/06/10/capturar-punto-de-google-maps.aspx</id><published>2009-06-10T08:31:00Z</published><updated>2009-06-10T08:31:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;A veces uno se encuentra con peque&amp;ntilde;os problemas que deber&amp;iacute;an de ser sencillos. Este fue el caso de cuando me propuse realizar una interfaz para una aplicaci&amp;oacute;n windows donde el usuario pudiese elegir cual era su localizaci&amp;oacute;n en un mapa de google maps y calcular la distancia a uno de nuestros almacenes. La opci&amp;oacute;n buena ser&amp;iacute;a utilizar la api de google maps para estas tareas, pero quiero algo m&amp;aacute;s sencillo, que funcione sin tener que instalar nada a mayores.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;Primer inconveniente, &amp;iquest;de donde saco las coordenadas del usuario? Googleando un poco encontr&amp;eacute; un sencillo script que comparten muchos &lt;a href="http://www.tech-recipes.com/rx/2403/google_maps_get_latitude_longitude_values/"&gt;sitios&lt;/a&gt;. Basta con introducir en la barra de direcciones el script &lt;span style="color:#ff0000;"&gt;java_script:void(prompt(&amp;#39;&amp;#39;,gApplication.getMap().getCenter()))&amp;nbsp;&lt;/span&gt;&amp;nbsp;y nos aparecer&amp;aacute; un mensaje con la latitud y longitud.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;Segundo problema, &amp;iquest;como recojo esto en mi c&amp;oacute;digo? &lt;span style="font-family:Arial;"&gt;Bueno, pues b&amp;aacute;sicamente el truco est&amp;aacute; en utilizar ese resultado no para sacarlo en un prompt, si no para redirijir la p&amp;aacute;gina del webbrowser en donde est&amp;aacute; cargado google maps. De esta forma en el evento navigating puedo analizar&amp;nbsp;la direcci&amp;oacute;n a la&amp;nbsp;que intento navegar, cancelarla y&amp;nbsp;conseguir las coordenadas.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="font-family:Arial;"&gt;El siguiente ejemplo&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;hace precisamente eso, en un formulario donde unicamente se ha agregado un webBrowser (webBrowser1) y un bot&amp;oacute;n (button1):&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Form2_Load(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;webBrowser1.Url = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;http://maps.google.es&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;webBrowser1.Navigate(&lt;span style="color:#a31515;"&gt;&amp;quot;java_script:navigate(&amp;#39;&amp;quot;&lt;/span&gt; + clave + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39;+gApplication.getMap().getCenter())&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; webBrowser1_Navigating(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;WebBrowserNavigatingEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; aux = e.Url.ToString();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (aux.StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;http://maps.google.es/&amp;quot;&lt;/span&gt;+clave))&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;{&lt;span style="color:green;"&gt;//Navegaci&amp;oacute;n iniciada por nuestro c&amp;oacute;digo javascript&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PointF&lt;/span&gt; direccion;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aux = aux.Substring((&lt;span style="color:#a31515;"&gt;&amp;quot;http://maps.google.es/&amp;quot;&lt;/span&gt;+clave).Length);&lt;span style="color:green;"&gt;//Eliminamos la url incial, qued&amp;aacute;ndonos solo con el punto&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aux= aux.Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;,&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;); &lt;span style="color:green;"&gt;//Eliminamos los par&amp;eacute;ntesis&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] punto=aux.Split(&lt;span style="color:#a31515;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;);&lt;span style="color:green;"&gt;//Dividimos el texto en las dos coordenadas&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;direccion = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PointF&lt;/span&gt;(&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;float&lt;/span&gt;.Parse(punto[0].Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;)), &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;float&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;.Parse(punto[1].Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;))); &lt;span style="color:green;"&gt;//Parseamos las dos coordenadas al punto resultado&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;e.Cancel = &lt;span style="color:blue;"&gt;true&lt;/span&gt;; &lt;span style="color:green;"&gt;//Cancelamos la navegaci&amp;oacute;n, la p&amp;aacute;gina resultante no es v&amp;aacute;lida.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Ya tenemos el punto, podemos hacer lo que queramos con &amp;eacute;l!!!&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(direccion.ToString()); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Para completar el ejemplo falta la parte de &amp;iquest;que hago ahora con el punto? y &amp;iquest;como encuentro la distancia a mis almacenes registrados en Sql Server?. &lt;/p&gt;
&lt;p&gt;Queda pendiente para el siguiente post...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Nota: substituir java_script por el equivalente sin gui&amp;oacute;n bajo para que funcione el c&amp;oacute;digo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=150254" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="javascript" scheme="http://geeks.ms/blogs/franotero/archive/tags/javascript/default.aspx" /><category term="google maps" scheme="http://geeks.ms/blogs/franotero/archive/tags/google+maps/default.aspx" /><category term="c#" scheme="http://geeks.ms/blogs/franotero/archive/tags/c_2300_/default.aspx" /></entry><entry><title>Implementación sencilla del ControlState</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/02/19/implementaci-243-n-sencilla-del-controlstate.aspx" /><id>/blogs/franotero/archive/2009/02/19/implementaci-243-n-sencilla-del-controlstate.aspx</id><published>2009-02-19T17:23:00Z</published><updated>2009-02-19T17:23:00Z</updated><content type="html">&lt;p&gt;El ControlState es un mecanismo alternativo al ViewState para guardar el estado de sesi&amp;oacute;n en un control de usuario. Como es bien conocido disponemos m&amp;uacute;ltiples objectos para guardar variables de sesi&amp;oacute;n, todos ellos con una utilizaci&amp;oacute;n parecida (b&amp;aacute;sicamente son colecciones clave-valor de tipo string-object), que nos permiten mantener el estado entre llamadas en distintos &amp;aacute;mbitos. El &amp;aacute;mbito del controlState es pareceido al ViewState, con la diferencia fundamental de que &amp;eacute;ste &amp;uacute;ltimo puede desactivarse. &amp;Eacute;ste es el motivo por el cual datos cr&amp;iacute;ticos para el buen funcionamiento del control deber&amp;iacute;an de guardarse en el ControlState &lt;a href="http://msdn.microsoft.com/en-us/library/1whwt1k7.aspx"&gt;(Ver Art&amp;iacute;culo MSDN)&lt;/a&gt; . Esta semana he constatado que su especial funcionamiento constituye una barrera de entrada para su utilizaci&amp;oacute;n en programadores poco iniciados. Por este motivo me he decidido a publicar este post, con un peque&amp;ntilde;o c&amp;oacute;digo que, insertado en nuestro control, har&amp;aacute; posible la utilizaci&amp;oacute;n del ControlState de forma an&amp;aacute;loga al objeto Cache, ViewState, Session, etc.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;,&lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt; ControlState;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//Guarda el diccionario personalizado y lo que &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//tuviese que guardar en el m&amp;eacute;todo base&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;protected&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; SaveControlState()&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Pair&lt;/span&gt;(&lt;span style="color:blue;"&gt;base&lt;/span&gt;.SaveControlState(), ControlState);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Recupera por separado el diccionario personalizado&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//y el objeto para el m&amp;eacute;todo original&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;protected&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; LoadControlState(&lt;span style="color:blue;"&gt;object&lt;/span&gt; savedState)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (savedState != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pair&lt;/span&gt; par=(&lt;span style="color:#2b91af;"&gt;Pair&lt;/span&gt;)savedState;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.LoadControlState(par.First);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (par.Second != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ControlState = (&lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;gt;)par.Second;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(ControlState==&lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ControlState=&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;,&lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Y para que todo esto funcione solo nos resta a&amp;ntilde;adir en el evento load de la p&amp;aacute;gina la siguiente l&amp;iacute;nea:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Page.RegisterRequiresControlState(&lt;span style="color:blue;"&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=143065" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="ASP.NET" scheme="http://geeks.ms/blogs/franotero/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Puesta a cero de la base de datos en pre-producción</title><link rel="alternate" type="text/html" href="/blogs/franotero/archive/2009/02/07/puesta-a-cero-de-la-base-de-datos-en-pre-producci-243-n.aspx" /><id>/blogs/franotero/archive/2009/02/07/puesta-a-cero-de-la-base-de-datos-en-pre-producci-243-n.aspx</id><published>2009-02-07T15:53:00Z</published><updated>2009-02-07T15:53:00Z</updated><content type="html">&lt;p&gt;Tenemos nuestro nuevo proyecto preparado para el despliegue. Subimos nuestro sitio web al servidor de producci&amp;oacute;n, ejecutamos el script de creaci&amp;oacute;n de la base de datos, configuramos la aplicaci&amp;oacute;n y vamos a probar y ..... no funciona&amp;nbsp;grrrr#**&amp;amp;*!!!!&amp;nbsp;&amp;iexcl;A cu&amp;aacute;ntos nos sonar&amp;aacute; este tema! Lo cierto es que es posible ( e incluso probable) que con el cambio de entorno tengamos que hacer unos cuantos retoques en nuestra aplicaci&amp;oacute;n, realizar unas cuantas pruebas, etc. Despues de esto nuestra reci&amp;eacute;n creada base de datos estar&amp;aacute; sucia y posiblemente queramos volver a inicializarla.&lt;/p&gt;
&lt;p&gt;Por diversos motivos puede que no nos interese cargarnos la base de datos otra vez, con lo cual intentaremos unicamente borrar las tablas (puede que ni siquiera tengamos permisos para borrar la base y volverla a crear, de ah&amp;iacute; el interes de este m&amp;eacute;todo). Podemos utilizar un procedimiento que recorra las tablas listadas en INFORMATION_SCHEMA.TABLES e vaya ejecutando un delete sobre ellas. Con este m&amp;eacute;todo &amp;uacute;nicamente borraremos parte de las tablas, ya que tenemos altas probabilidades de que muchas de las filas se queden bloqueadas por relaciones foreign key al ejecutar el barrido con un orden arbitrario (el de INFORMATION_SCHEMA.TABLES). Adem&amp;aacute;s tenemos el problema a&amp;ntilde;adido de que los &amp;iacute;ndices de las tablas no se reinicializan ya que debido otra vez a las foreign keys no podemos utilizar Truncate en lugar de Delete.&lt;/p&gt;
&lt;p&gt;El c&amp;oacute;digo listado a continuaci&amp;oacute;n viene a solucinonar la problem&amp;aacute;tica descrita, borrando todas las tablas de la base de datos independientemente de sus relaciones y reinicializando los &amp;iacute;ndices a 0 en las tablas que dispongan de este tipo de campos. N&amp;oacute;tese que el c&amp;oacute;digo hace incidencia especialmente en lo funcional, obviando consideraciones que nos distaigan del objetivo principal&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Definimos la conexi&amp;oacute;n a la base&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; cn = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF;"&gt;SqlConnection&lt;/span&gt;(&lt;span style="color:#A31515;"&gt;&amp;quot;ConnectionString&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//Definimos un comando auxiliar&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2B91AF;"&gt;SqlCommand&lt;/span&gt; aux = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF;"&gt;SqlCommand&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, cn);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Por &amp;uacute;ltimo un comando auxiliar que carga las tablas de la base de datos. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:10.0pt;" lang="EN-US"&gt; select = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF;"&gt;SqlCommand&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;@&amp;quot;select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE like &amp;#39;BASE TABLE&amp;#39;&amp;quot;&lt;/span&gt;, cn);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt; selectDA = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF;"&gt;SqlDataAdapter&lt;/span&gt;(select);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; tablas;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;selectDA.Fill(tablas = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt;());&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cn.Open();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; repetir;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;do&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;repetir=&lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataRow&lt;/span&gt; tabla &lt;span style="color:blue;"&gt;in&lt;/span&gt; tablas.Rows)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;span style="color:green;"&gt;//Borramos cada una de las tablas&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;aux.CommandText = &lt;span style="color:#A31515;"&gt;&amp;quot;Delete &amp;quot;&lt;/span&gt; + tabla[&lt;span style="color:#A31515;"&gt;&amp;quot;TABLE_NAME&amp;quot;&lt;/span&gt;].ToString();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aux.ExecuteNonQuery();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2B91AF;"&gt;SqlException&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(ex.Number==547) &lt;span style="color:green;"&gt;//Infracci&amp;oacute;n de FK: hay que repetir el borrado &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;repetir=&lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;span style="color:blue;"&gt;while&lt;/span&gt; (repetir);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2B91AF;"&gt;DataRow&lt;/span&gt; tabla &lt;span style="color:blue;"&gt;in&lt;/span&gt; tablas.Rows)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aux.CommandText = &lt;span style="color:#A31515;"&gt;&amp;quot;DBCC CHECKIDENT (&amp;quot;&lt;/span&gt; + tabla[&lt;span style="color:#A31515;"&gt;&amp;quot;TABLE_NAME&amp;quot;&lt;/span&gt;] + &lt;span style="color:#A31515;"&gt;&amp;quot;,RESEED,0)&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;aux.ExecuteNonQuery();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{}&lt;span style="color:green;"&gt;//No todas las tablas tienen columnas de identidad para regenerar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:green;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;line-height:115%;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cn.Close();&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=142220" width="1" height="1"&gt;</content><author><name>franotero</name><uri>http://geeks.ms/members/franotero/default.aspx</uri></author><category term="sqlserver" scheme="http://geeks.ms/blogs/franotero/archive/tags/sqlserver/default.aspx" /></entry></feed>