martes, 30 de octubre de 2012

Costa Rica y el Comercio Internacional


Definitivamente se hace totalmente necesario el desarrollo de los negocios internacionales, y más aun en países tan pequeños y con tanta necesidad en recursos y materia prima como el nuestro. Desde que tengo memoria, recuerdo que Costa Rica siempre estaba ubicado muy por encima de sus homólogos regionales en temas básicos para el desarrollo como la esperanza de vida, seguridad, la alfabetización y la educación en general, superando incluso en algunos casos los niveles de los países desarrollados, pero de la misma forma el tema económico siempre se ha convertido en el mayor obstáculo para llegar al desarrollo.
En vista de esta necesidad, nuestro país siempre ha procurado salir adelante a base de esfuerzo, tal vez nuestra primer incursión fuerte en el tema de los negocios internacionales fue con la exportación del café y posteriormente el banano, seguidamente se optó por introducir otros productos agrícolas menos tradicionales como la caña de azúcar, el pejibaye, y llegar a impulsar a mediados de los ochenta, la exportación de productos industriales a costa de mayores importaciones, así como la diversificación de los destinos y el desarrollo de alianzas internacionales fueran estas bilaterales o multilaterales.
No cabe duda de que un punto importante en el impulso económico de nuestra nación fue la abolición del ejercitó que facilitó la utilización de recursos en otras áreas más productivas y a la vez menos destructivas como la salud y la educación, adicionando una mejor imagen internacional de nuestra nación, que se reforzó con eventos como el premio Nobel de la paz.
Esa educación que no hacía tan visible sus frutos cobró mayor importancia con la incursión de empresas transnacionales como Intel y HP, con lo cual aprovecharon los beneficios de la mano de obra barata y de buena calidad existente en nuestra nación, lo cual ha suscitado un efecto bola de nieve para otras multinacionales como Amazon, la venda de conocimiento definitivamente ha sido un punto alto para el mayor ingreso de divisas a nuestra nación.
Tras veinte años de haber ingresado a la Organización Mundial del Comercio (OMC), instituciones como el CEPAL afirman que Costa Rica ha tenido una exitosa política de inversión extranjera, y basta con echar un vistazo a los diferentes índices nacionales e internacionales, por ejemplo, en el presente año el Foro Económico Mundial, ubicó a nuestro país en la posición número tres a nivel latinoamericano y en la cuarenta y tres a nivel mundial, como uno de los países más abiertos al comercio internacional (Enabling Trade Report 2012), resaltándose puntos como la atracción de inversión extranjera directa en la industria de las tecnologías de la información y comunicación, el crecimiento del aporte en ciencias de la salud y el clima de negocios (Córdoba, 2012). Otro índice de dicha institución, es el índice de competitividad global, el cual nos ubica como número cinco de Latinoamérica y cincuenta y siete del mundo, mejorando su posición con respecto al año pasado, lo cual no deja de ser bueno, aunque otros sectores más estrictos afirman que en ese sentido estamos experimentando un estancamiento al no mejorar la cantidad de puntos obtenidos durante los últimos tres años. Este índice en particular nos muestra mejoras importantes en temas como el entorno macroeconómico o la preparación tecnológica, pero evidencia descensos peligrosos en temas en los que siempre hemos sobresalido como la salud y la educación, lo cual nunca se podrá descuidar. Otro índice del Foro Económico mundial, es el Ranking Global de Información y Tecnología en el que nuestro país ocupa el cuarto lugar de Latinoamérica, y la posición 58 del mundo, cayendo eso sí seis posiciones con respecto al año pasado, esto debido principalmente al exceso de trámites, la burocracia y la falta de infraestructura. Por otra parte el instituto de competitividad de ADEN posicionó a Costa Rica como cuarto lugar, situándose solamente por debajo de México, Chile y Panamá y superando a países como Brasil, Uruguay, Colombia y Argentina con una puntuación de 72% sobre una base de 100%, aumentando un escalafón con respecto al año pasado. En dicho estudio destacan aspectos como salud (primer lugar), educación (segundo lugar) e instituciones en contraposición de otros rubros como expectativa de la población y competencia de mercados en donde no se obtuvo una calificación positiva.
Datos como este son los que animan a empresas como CINDE a afirmar que Costa Rica es un ejemplo de competitividad en América Latina, al ser quinto lugar del mundo en desempeño ambiental, el primer exportador de alta tecnología de América Latina y cuarto del mundo, el país más seguro de América Latina y el primero en innovación, estar dentro del top cinco de los mejores destinos en América para el establecimiento de operaciones de servicio y al tener a San José dentro del top tres de las ciudades de Outsourcing de América Latina.
Sin embargo muchos de estos mismos estudios reflejan áreas de gran debilidad para el desarrollo del comercio internacional, afectando directamente la competitividad de nuestra nación en este rubro, obtener posiciones tan bajas como la 131, 140 y 130 en áreas tan fundamentales para esta actividad como la infraestructura vial, portuaria y los procedimientos para iniciar un nuevo negocio, definitivamente son preocupantes y es aquí en donde hay que hacer especial énfasis con el fin de no solo ser de los primeros en Latinoamérica, si no también de los primeros en el mundo y ser cada vez mejor en un ambiente tan competitivo como el del comercio internacional.
Lamentablemente, un tema en el que solemos ser recurrentes es que las importaciones sean mayores a las exportaciones, reflejándose en un déficit prácticamente perpetuo, cuando lo más sano para las economías es manejar un superávit, sin tampoco caer en el pensamiento de que el mundo ideal es eliminar las importaciones, estas son igualmente importantes que las exportaciones en un modelo de comercio internacional sano, ya que difícilmente las naciones van a llevar a cabo importaciones sobre una economía cerrada, además de que muchas veces los productos importados incluyen materia prima esencial para la manufactura de otros productos de exportación. Hay que recordar que por la época de la primera guerra mundial las importaciones prácticamente se cayeron en nuestro país y esto no significó ningún beneficio para nosotros.

     Son muchos los puntos por mejorar, y esperamos se sigan tomado decisiones correctas en momentos justos, quizás el punto más importante para mejorar en nuestro país con relación a este tema es el de la infraestructura nacional, así como se hizo necesario el ferrocarril con las primeras exportaciones de banano y la autopista interamericana en su momento, en estos momentos urge llevar a cabo inversión para mejorar las carreteras e incluir nuevas vías con el fin de que se facilite el transporte de mercancía, igualmente es fundamental el tema de los puertos en donde al menos ya que tomó un primer paso con la concesión de Caldera esperando lo mismo con la concesión de puerto Moín, ya que nuestros puertos están en la actualidad entre los peores del mundo, igualmente el tema de los aeropuertos no se pueden dejar de lado y las trabas burocráticas que afectan aspectos como la facilidad de hacer negocios, mismo que ya se está examinando en estos momentos por parte del gobierno, con el fin de salir mejor posicionados en el siguiente ranking y principalmente hacer más fluido y fácil el tema de los negocios internacionales.

viernes, 28 de octubre de 2011

Costa Rica Carbono Neutral

Los gases invernadero poseen moléculas que al vibrar producen radiación y calor, en lo que se conoce como el efecto invernadero, causando grandes efectos sobre el clima, como el calentamiento global. Ejemplos de gases invernaderos son el dióxido de carbono, vapor de agua, metano y óxido nitroso. Estos gases se producen al utilizar energía eléctrica y combustibles como la gasolina el carbón y el gas. Otras fuentes de energía como la solar y la eólica no contribuyen al efecto invernadero, pero por lo general son más caras. Ser carbono neutral significa remover de la atmósfera tanto bióxido de carbono como el que agregamos. El concepto de carbono neutralidad, se aplica a países, regiones, organizaciones, o incluso hogares. Por ejemplo el hospital San Rafael de Alajuela espera ser carbono neutral para el 2013, sin embargo en la actualidad no existe ningún país que sea carbono neutral. Entre los países o comunidades que se han comprometido a la neutralidad se encuentran Costa Rica, Islandia, Las Maldivas, Nueva Zelandia, Noruega, Tuvalu y El Vaticano. La ventaja de Costa Rica reside en que un 46.7% de de su energía primaria viene de recursos renovables, mientras que el 94% de su electricidad se genera a partir de plantas hidroeléctricas, granjas eólicas o energía geotérmica, además de su riqueza forestal y biodiversidad.
Para poder lograr el objetivo de ser carbono neutral hacia el 2021, como bien lo mencionó el presidente Arias en su oportunidad, se requiere del esfuerzo de todos los ciudadanos y el de los futuros gobernantes, Para este fin se creó la Estrategia Nacional de Cambio Climático (ENCC). Según esta organización, se vislumbra un crecimiento de largo plazo de productos y servicios con una huella de carbono baja o neutral, aunque también se encuentran riesgos inminentes, entre ellos de aspecto físico, regulatorio, tales como regulaciones nacionales o internacionales más estrictas para reducir las emisiones de gases que causan efecto invernadero y riesgos de aspecto competitivo, los cuales son dignos a tomar en cuenta, desde el punto de vista económico, ya que podrían darse bajas en la demanda de productos y servicios que sean intensivos en cuanto a energía, además de impactos en cuanto a la reputación de marcas o empresas si no se toman acciones con respecto al cambio climático y un crecimiento en los costos de los procesos intensivos en energía. Como se mencionó inicialmente las fuentes de energías alternativas suelen ser más costosas.
Pero además de los riesgos existen grandes beneficios para el país, siendo sin lugar a dudas el más visible de estos el impacto económico que podría generar el sector turismo, que se vería atraído por ser Costa Rica uno, o si no es primer país en ser carbono neutral, mejoras en la salud de la población que se vería reflejado en menores gastos por incapacidades, medicamentos, seguros, etc. y un menor impacto en la producción.
Para nadie es un secreto que llevar a cabo esta tarea no es para nada simple, ya que todas las entidades emisoras, deberán tomar acciones de reducción y adaptación para reducir su huella de carbono, y compensar lo que no se pueda eliminar por cuenta propia, negociando con otra entidad que tenga “números positivos” en cuanto a su emisión de carbono, no sin antes pagar una cuota económica para propiciar el cambio. Este tipo de alternativas no son vista del todo sanas, ya que indican que se puede comprar la C neutralidad dando cabida a acciones de corrupción y de poco control. Además muchas de la acciones de la ENCC han sido cuestionadas, ya que una de sus estrategia incluye un vasto plan de reforestación, que en principio no está mal, financiado con iniciativas como el 3.5% aplicado a los combustibles, pero suena imposible en el sentido de la gran cantidad de hectáreas que se requeriría reforestar para cumplir la meta. Para algunos expertos tampoco es suficiente el llevar a cabo estrategias de restricción vehicular, si no que prácticamente se requeriría cambiar la flotilla del país por vehículos que utilicen otro tipo de combustible que no sean derivados del petróleo, esto afirmación, se sustenta principalmente, en el hecho de que más de la mitad de los nueve millones de toneladas de más que se producen en Costa Rica anualmente corresponde a la quema de hidrocarburos. Relacionado con este tema también se habla sobre la soberanía energética, que consiste en dejar de ser dependiente del petróleo que no se produce en nuestro país. Definitivamente el lograr objetivos como este ayudaría a nuestro país no solamente a acercarse a la neutralidad si no que la beneficiaría de gran manera desde el punto de vista económico. Tampoco es una labor simple en cuanto a los recursos monetarios requeridos, según el INCAE, lograr esta meta se traduce en $292.7 millones anuales (cerca del 1% del PIB).
Definitivamente en la actualidad no es nada fácil para una nación, el tratar de ser “verde”, pero a la vez desarrollados. Sin embargo es una iniciativa que a través de un trabajo arduo, honesto y bien intencionado, traerá consigo grandes beneficios, aunque solo se logre una baja en los niveles de carbono y no necesariamente la neutralidad total.
Fuentes de Información

http://www.carbonfund.org/

jueves, 27 de octubre de 2011

Un poco sobre la Web 2.0

Tenía tiempo de no escribir en el blog, más que nada por razones de tiempo, producto de otra maestría que estoy cursando, esta vez en modalidad on-line, tal vez para aprovechar un poco lo que me ha tocado desarrollar en los diferentes cursos, aprovecho para adjuntar un comentario que hice sobre la Web 2.0.
El término Web 2.0 fue acuñado por Dale Dougherty y Tim O’Reilly en el año 2004 a raíz de una tormenta de ideas con Media Live International, haciendo referencia a una segunda generación en la historia de Internet, mediante la cual entendieron el hecho de que Internet, antes de desplomarse con la caída de las punto com, se estaba fortaleciendo con un tipo de aplicaciones y paradigmas nunca antes visto. Este tipo de aplicaciones y paradigmas nuevos se relacionaban principalmente con el concepto de sitios colaborativos y sociales, se alejaba un poco el concepto clásico de Internet que servía básicamente para proveer información de ciertas fuentes, como por ejemplo universidades, sitios de noticias, etc. Si no que ahora existían aplicaciones orientadas a alimentarse de la colaboración de básicamente cualquier persona.
Algunos tipos de sitios Web 2.0 son las redes sociales, las wikis, los blogs, servicios web, foros, mashups, sindicación de contenidos (RSS, ATOM), folcsonomías entre otros, tal vez el tipo de aplicaciones más clásicas y con los que la gente asocia más el concepto de Web 2.0 son las redes sociales, pero estas mismas también existen en una gran cantidad de clasificaciones diferentes, las denominadas redes de uso general, en donde se suele compartir información de perfil, imágenes, videos, links, etc. Tales como Facebook o Myspace, redes sociales profesionales o de empleo como LinkedIn, de microblogging como Twitter, de preguntas y respuestas como Quora o Yahoo Answers, redes de noticias como Digg o Reddit, redes geosociales como Google Latitude, Gowalla o Foursquare, incluso redes de tránsito vial como Waze, esta lista puede variar o aumentar dependiendo del autor y a manera que vayan surgiendo nuevos tipos o redes más específicas.
Algo muy importante a tomar en cuenta, y tal vez alguna de la razones por las que en el mismo sitio de O’Reilly se manifiesta que en la actualidad existen críticas que asocian el término como una frase de moda, de marketing o sin sentido. Es que el cambio generacional de la Web marcado por el concepto de web 2.0, no se refiere específicamente a ningún cambio en cuanto a las especificaciones técnicas de la Web, sino más bien a un cambio en cuanto al tipo de aplicación desarrollada a través de la Web y el uso dado a estas por medio del usuario final, o sea las personas que a través de un browser como Internet Explorer, Google Chrome o Mozilla Firefox utilizan este tipo de aplicaciones. Incluso el creador de la World Wide Web (WWW) Tim Berners-Lee, ha calificado el término como solo una jerga.
Lo cierto es que en la actualidad el término ha tenido más de 9.5 millones de menciones en Google, y que realmente este tipo de redes sociales han causado un tipo de revolución en Internet y se han visto beneficiadas producto de nuevas tecnologías, incluso ha forzado la creación de nuevos protocolos de comunicación y estándares de desarrollo.
En el futuro ya se deslumbra el uso de nuevos términos como la Web 3.0, la Web Semántica y la Web al cuadrado. Incluso el término de Web Semántica ya se encuentra definido oficialmente por organizaciones tan prestigiosas como la W3C (World Wide Web Consortium).

lunes, 13 de diciembre de 2010

Cómo medir el porcentaje de grasa del cuerpo

Pues leyendo un poco sobre cómo calcular el porcentaje de grasa del cuerpo, en resumen me doy cuenta que no hay forma precisa de medirla, tal vez lo mejor sea hacer lo que se recomienda en el fat calliper que me compré, medir un pliego y ver las variaciones con el tiempo. Existen alrededor de 100 fórmulas que pueden dar resultados muy diferentes y dependiendo de la persona que lo mide, la hora del día, si se hizo ejercicio o no, la edad, la raza, el sexo, etc. etc. va a cambiar, eso sin tomar en cuenta que con un calliper solo se toma la grasa subcutánea y que a más edad hay más grasa interna. Y eso que se supone que los callipers manuales son más precisos que los aparatos eléctricos.


Dejo unos links interesantes, en este se explica en detalle lo que aquí les hablo:
http://www.sport-fitness-advisor.com/bodyfatcalipers.html

Y en este otro vienen algunas fórmulas y demás datos interesantes:
http://www.linear-software.com/online.html

sábado, 20 de noviembre de 2010

Reflexión sobre el amor

¿Por qué no trato de ser especial?
Amando a aquel que me hizo mal,
Haciendo lo que digo ser:
Si soy listo, usar la cabeza,
Si soy capaz, cumplir mis metas,
Si soy curioso, conocer.
Si quiero que cualquier ser
Mis faltas deje en el olvido
Lo mismo haré con los demás,
Echando el orgullo atrás,
Disfrutando lo vivido.
Porqué reprimo algo tan grande,
Si no tengo amor nada soy,
En cualquier tiempo, incluso hoy,
Puedo honrar al que dio su sangre.
Y que el amor no se confunda,
Pon atención a esta pregunta:
Si te necesito para ser feliz,
Y dejar atrás de un día lo gris,
Se ha despertado un mal dormido:
La carencia ha florecido.
Porqué somos tan egoístas
Privando al mundo de sonrisas,
Esto ayuda al desdichado;
Y no es para nada errado,
Ayudar al que está a mi lado,
Hacerle ver que al caer
Digno es de admiración
Levantarse sin roer
Y aprender una lección;
También hay que ser capaz
Como dijo una doncella
De amar hasta que duela
Y cuando duela amar más.

RZM

miércoles, 28 de abril de 2010

Un poco de usuarios y permisos

En esta ocasión me gustaría hablar un poco sobre un tema que tiende mucho a confundir, pero a la vez es muy útil de conocer ya que se da en diversas situaciones dentro del desarrollo de aplicaciones ASPNET. Para empezar me gustaría diferenciar que principalmente hay tres usuarios asociados a una aplicación Web. El usuario autenticado que puede ser visualizado a través de la siguiente sentencia:

System.Threading.Thread.CurrentPrincipal.Identity.Name

, el usuario del contexto de seguridad, por lo general es el que va a tener acceso a algunos recursos, esta se puede ver a través de:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

, y el usuario encargado de correr el proceso.

El usuario autenticado prácticamente puede tener cualquier cosa desde “vacío” en el caso de que se utilice autenticación anónima en el IIS o la aplicación esté configurada para no utilizar autenticación del todo (); hasta cualquier usuario customizado. El usuario del servicio, sí deberá poseer una cuenta de Windows válida siempre, ya sea como usuario de una máquina local o de un Active Directory, este usuario por defecto es ASPNET en IIS 5 (Windows XP, 2000) o NETWORK SERVICE en IIS 6 o 7 (Windows 2003, Vista, 7). Inicialmente y por lo regular el usuario que corre el proceso es el mismo del contexto de seguridad. Recordemos que en este caso, el proceso (Worker Process), es el proceso que ejecuta el IIS para el sitio y se llama “aspnet_wp” en IIS 5 y “w3wp” en IIS 6/7, por lo que usuario que lo ejecuta podría se visualizado desde el administrador de tareas de la máquina que hostea la aplicación Web.

Otro punto importante es la impersonificación (Impersonate). Si a través del web.config habilitamos la impersonificación () el usuario del contexto de seguridad, asume la identidad del usuario autenticado, esto puede ser útil en casos donde se necesitan accesar recursos especiales como un archivo de texto, el log de eventos, un WebService, una cola, una base de datos, etc. y el usuario por defecto (ASPNET o NETWORK SERVICE) al ser un usuario de bajos privilegios no tendría permisos para dicho fin. Pero hay que tener mucho cuidado al llevar a cabo esta acción, solo debería utilizarse para recursos en los que efectivamente el acceso es por usuario, porque de no ser así no tendría mucho sentido asignar permisos a todos los usuarios de la aplicación sobre un recurso en particular. Esta situación no se presentaría en el caso de que se asigne un usuario específico en la impersonificación (), pero igualmente sería un asunto de cuidado, además de que como sabemos la sentencia anterior no es muy segura.

En ambientes con IIS 6 o superior todo sitio Web se ejecuta bajo un aplication pool, el default application pool tiene asignada la cuenta de NETWORK SERVICE, es por esto que esta es la cuenta que corre el proceso por defecto, así las cosas, otra opción para resolver el problema anterior podría ser utilizar un pool customizado con una cuenta específica.

También hay situaciones en las que el acceso al recurso específico es por usuario, pero como medida de seguridad, no se desea impersonificar siempre, en estos casos se podría llevar a cabo una impersonificación temporal a través del objeto WindowsImpersonationContext, esto se ilustra en el siguiente ejemplo, accesando un WebService:

localhost.Service proxy = new localhost.Service();

IPrincipal p = this.User;
WindowsIdentity wi = (WindowsIdentity)p.Identity;
WindowsImpersonationContext wic = wi.Impersonate();
try
{
// Recurso que requiere cierto permisos
proxy.Credentials = CredentialCache.DefaultCredentials;
retorno = proxy.HelloWorld();
}
finally
{
wic.Undo();
}


Y ya que estamos con un ejemplo de acceso a un WebService cabe destacar que al accesar un WebService desde un sitio Web el usuario del contexto de seguridad, pasaría a ser el usuario autenticado dentro del mismo, por ejemplo si el usuario autenticado es “rzumbado” y el usuario del contexto de seguridad es ASPNET, al llamar al servicio Web, dentro del contexto del mismo, ASPNET pasaría a ser el usuario autenticado, siempre y cuando se utilice la sentencia se asignen las DefaultCredentials a las credenciales del proxy (proxy.Credentials = CredentialCache.DefaultCredentials;). De no asignarse las credenciales, el servicio Web se estaría accesando de forma anónima.

Una vez explicado esto se puede entender porqué, un WebService sin autenticación anónima por lo general da un error de acceso denegado si no se setean las credenciales y porqué en un WebService sobre el que no tiene acceso ASPNET o NETWORK SERVICE hay que impersonificar temporal o permanente o utilizar un usuario customizado a través de un aplication pool en IIS 6.

martes, 20 de abril de 2010

Sobre Cursores y Tablas Temporales

Investigando un poco por la Web y a raíz de diferentes posiciones de clientes con respecto al uso o no de tablas temporales, cursores y variables de tipo tabla en Sql Server, me percaté de que allí también existen opiniones muy variadas, por lo que decidí darme a la tarea de investigar un poco por mi cuenta y hacer mis propias pruebas. Para los que no saben les cuento que las tablas temporales se almacenan en una base de datos de sistema llamada TempDB, en cuanto a las variables tipo tabla y los cursores se almacenan en memoria hasta cierto límite, para luego, en caso de que sea necesario utilizar igualmente la base de datos TempDB.
La prueba consistió en lo siguiente, creé una tabla con cuatro columnas, nada especial, de hecho tomé una tabla de pruebas que ya existía en la base de datos:

CREATE TABLE Test(
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL
) ON PRIMARY


E inserté ciertos valores, probé con cantidades tan variadas como 10.000 o 700.000 registros

DECLARE @i decimal(8), @j decimal(8)
SET @i = 1
SET @j = 300000
WHILE @i <= @j
BEGIN
INSERT INTO Test(Col1, Col2, Col3, Col4) VALUES(1,10,500,8)
SET @i = @i + 1
END


La prueba básica consistió en realizar lo que más comúnmente hacemos con este tipo de objetos, que es crear la estructura, llenarla y procesarla obteniendo la información de la misma.

Primero hice pruebas con tablas temporales y variables tipo tabla, en teoría lo recomendable es utilizar variables tipo tabla con cantidades pequeñas de registros y tablas temporales con cantidades más grandes, me sorprendió que en todos los casos fue más veloz el uso de tablas temporales, en el peor de los casos duró 22 seguros, mientras que el uso de variables tipo tabla duró 29. Si bien es cierto la diferencia no es mucha comparativamente hablando, si fue un comportamiento que siempre se dio:

-- 22
SELECT * INTO #Test FROM Test
SELECT * FROM #Test
DROP table #Test


-- 29
DECLARE @Test TABLE (
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL)
INSERT @Test SELECT * FROM Test
SELECT * FROM @Test


Para constatar que no estubiera afectando el hecho de que con el uso de tablas temporales se estaba omitiendo la creación explícita de la misma, además de la forma de llenado, también hice las mismas pruebas con un tabla temporal, pero creándola explícitamente y llenándola con una cláusula INSERT-SELECT en vez del SELECT-INTO, utilizado en el ejemplo anterior. En este caso los tiempos de respuesta fueron prácticamente iguales que los arrojados con la prueba de la variable tipo tabla

-- 29
CREATE TABLE #Test (
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL)
INSERT #Test SELECT * FROM Test
SELECT * FROM #Test
DROP table #Test


Para enriquecer aun más la prueba, hice lo mismo con tablas permanentes. En este caso, el peor escenario duró más que el procesamiento de la tabla temporal (42 segundos), pero le di el beneficio de la duda al haberse creado en la base de datos actual, misma que para este efecto en particular estaba más saturada que TempDB, que es donde se almacenan las tablas temporales, por lo que hice otra prueba en donde creaba la tabla permanente en la misma base de datos de las tablas temporales y el comportamiento fue básicamente el mismo de estas con un tiempo en el peor caso de 30 segundos:

-- 42
CREATE TABLE Test2 (
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL)
INSERT Test2 SELECT * FROM Test
SELECT * FROM Test2
DROP table Test2


-- 30
CREATE TABLE tempdb.dbo.Test2 (
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL)
INSERT tempdb.dbo.Test2 SELECT * FROM Test
SELECT * FROM tempdb.dbo.Test2
DROP table tempdb.dbo.Test2



Este conviene traer a la reflexión lo que muchas veces pasa con las tablas temporales, como ya se mencionó se almacenan en TempDB, demás de otros objetos, como variables, cursores, objetos internos del motor, versiones de filas generadas por las transacciones, etc. En la medida en que se utilicen en exceso este tipo de objetos, dicha base de datos puede ver afectado su rendimiento, en el ejemplo que hice pasó lo inverso, porque en dicho servidor se utiliza muy poco la base de datos TempDB, pero la base de datos del sistema si tendía a sobrecargarse. Muchas veces se sataniza el uso de tablas temporales, pero al igual que todo, es cuestión de moderación.

Para terminar la prueba faltaba el caso de los recorridos, los cursores siempre han sido muy criticados por causar latencia, esto es cierto por lo que en la manera de los posible hay que evitar su uso, lamentablemente no siempre es ta sencillo evitar usarlos, por ejemplo en casos en que hay que realizar algún tipo de cálculo por cada registro. Las pruebas se realizaron con los mismos escenarios de las anteriores y por lo general rondó el doble o más de que tardaba el proceso con tablas temporales, en el peor escenario duró 61 segundos:

-- 61
DECLARE @Col1 int, @Col2 int, @Col3 numeric(16, 2), @Col4 int
DECLARE cursor_test CURSOR FOR
SELECT *
FROM Test
OPEN cursor_test
FETCH NEXT FROM cursor_test INTO @Col1, @Col2, @Col3, @Col4
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM cursor_test INTO @Col1, @Col2, @Col3, @Col4
END
CLOSE cursor_test
DEALLOCATE cursor_test


Para mostrar la alternativa a los cursores realicé otro caso con un recorrido a una variable de tipo tabla, a través de una lógica que me encontré en más de un sitio, a razón de ser sincero al ver dicho código no me parecía que fuera muy eficiente, de hecho esperaba una forma menos artesanal de llevar a cabo dicha labor, pero no encontré ninguna, sin embargo viendo un poco los comentarios de los artículos esperaba alguna sorpresa, sin embargo no fue así, de hecho no puedo decir cuánto duró el peor escenario porque no tuve la paciencia de esperar, pero tardó más de 6 minutos. Para poder ver resultados, con el fin de constatar que la lógica estubiera bien tuve que probar con 10.000 registros arrojando una duración de desesperantes 15 segundos, contra un tiempo menor a un segundo con los clásicos cursores.

-- > 300
DECLARE @rowId int, @maxRowId int
DECLARE @Col1 int, @Col2 int, @Col3 numeric(16, 2), @Col4 int
DECLARE @Test2 TABLE (
rowId int identity(1,1),
Col1 int NULL,
Col2 int NULL,
Col3 numeric(16, 2) NULL,
Col4 int NULL)
INSERT @Test2 SELECT * FROM Test
SELECT
@rowId = min(RowId),
@MaxRowId = max(RowId)
FROM @Test2
WHILE @RowId <= @MaxRowId BEGIN
SELECT @Col1 = Col1, @Col2 = Col2,
@Col3 = Col3, @Col4 = Col4
FROM @Test2
WHERE RowId = @RowId
SET @RowId = @RowId + 1
END