Por Geymer Morales Cruz

Compartiendo Información...

Tips para informáticos

Tips para informáticos nace gracias a esas pequeñas necesidades que muchas veces nos complican el desarrollo de una aplicación, espero les sea de utilidad los códigos facilitados.

Códigos fuentes para aplicaciones de escritorio

Aca podras encontrar esa ayuda necesaria para sacar adelante tu aplicación, esos pequeños códigos fuentes que son fundamentales para que nuestro metodo funcione, además la funcionalidad de bases de datos fundamentales para el manejo de nuestros datos.

Códidos fuentes para aplicaciones web

Actualmente las aplicaciones web son fundamentales en las organizaciones, es por eso que estos tips te ayudaran a sacar adelante tu aplicación web.

Códigos fuentes Android

Con el incremento en los Smartphone, las app para estos dispositivos son fundamentales, es por esto que acá tendrás esas pequeñas bases para que puedas realizar tus app.

Códigos Fuentes Windows Mobile

Para los que han trabajado con las Pockets PC o Handheld, los métodos y códigos que encontraras te ayudaran en esos métodos importantísimos en tu aplicación.

Mostrando entradas con la etiqueta SQL Server. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL Server. Mostrar todas las entradas

UNION Y UNION ALL, DIFERENCIAS ORACLE - SQL

Hola gente, hoy día les explicare la diferencia en Oracle - SQL de UNION y UNION ALL, talvez se dirán que es algo sencillo pero la idea es compartir información y aprender juntos.

Pues bien resulta que en algún momento de mi vida hice dos consultas y necesitaba unirlas mediante la instrucción UNION para obtener un único conjunto de datos, al hacer esto al realizar la instrucción UNION el resultado era distinto o diferente al que yo necesitaba, es decir con el UNION el cálculo o la consulta no me mostraba los registros que requería y me hacían falta datos.

En la siguiente imagen muestro los datos que requiero o necesito

 




En esta otra imagen muestro los datos que obtenía al utilizan la instrucción UNION



Lo que está en rojo identifica la diferencia en cantidades, es aquí donde sale la interrogante, que puede estar pasando que al ejecutar el UNION no me muestra los datos que necesito, pues bien es acá en donde es importante saber la diferencias entre UNION y UNION ALL


UNION
La instrucción UNION permite vincular los registros de dos consultas pero NO se repetirán aquellos registros iguales, es decir en el conjunto de datos obtenido no se mostraran los registros iguales.

UNION ALL
La instrucción UNION ALL permite igualmente vincular los registros de dos consultas pero con la diferencia que SI SE repetirán los registros es decir mostrara todos los registros en el conjunto de datos.

Entonces que era el problema, que estaba pasando, bien en mi consulta no tenía agregada la columna factura_linea por decirlo de algún modo, de manera tal que cuando habían dos líneas con un mismo producto y precio entonces el UNION no me funcionaba ya que no me mostraba la fila duplicada.

Espero el articulo sea de utilidad, hasta la próxima…

Error de fechas en SQL Server (The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.)

Bueno primero que todo no es un error como tal, básicamente el título es así porque normalmente cuando a nosotros no nos funciona algo lo llamamos error.
Pues bien talvez este post no sea la gran cosa pero para aquellos que están empezando les ayudara bastante. Primero comentarles que no es un error es más bien configuración Regional y de idioma en nuestro SQL. Teniendo claro esto muestro el error que comúnmente se da al intentar grabar una fecha:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

La solución es fácil, para evitar estos inconvenientes hacemos o verificamos lo siguiente:

1-    En el servidor, utilizando el SQL Server Management Studio, vamos a Seguridad –> Inicios de Sesión y verificamos que el usuario con que estamos conectando a la base de datos, tenga como idioma predeterminado English.


Claro está que en mi caso estoy utilizando en mis aplicaciones el idioma Ingles, pero si ustedes están utilizando español por ejemplo entonces cambiarían al de ustedes.

2-    En el servidor, donde se aloja la base de datos, configuramos en Panel de Control –> Configuración Regional y de Idioma: English(Cambiarlo en el caso que ustedes utilicen otro idioma)

3-    En la maquina cliente, configuramos en Panel de Control –> Configuración Regional y de Idioma: English(Cambiarlo en el caso que ustedes utilicen otro idioma)

4-    Verifiquemos que la cadena de conexión de nuestra aplicación utilice ese usuario.
Bien estos son los pasos a seguir para configurar nuestro servidor y para que no nos muestre el error The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Por otra parte también podemos configurar el formato fecha dentro del server, esto lo puedes encontrar en el siguiente vínculo: http://support.microsoft.com/kb/173907/es
Claro está que todo lo anterior se puede automatizar en nuestras aplicaciones, sencillamente lo que deberíamos de hacer es que al iniciar nuestras APP estas detecten la configuración regional de nuestro servidor o el idioma y a partir de eso hacer nuestras consultas o inserciones, pero para los que están iniciando espero este pequeño post les sean de gran ayuda.

 Espero les sea de utilidad, comenten o compartan así todos aprendemos… saludos.

Seleccionar registros de una tabla que no están en otra SQL Server

[SQL]Select tabla registros no están en otra tabla

Hola, otra vez por acá compartiendo un par de consultas que pueden ser de mucha ayuda, son sencillas pero para personas que están comenzando en este mundo serian de mucha ayuda, resulta que en algún momento en uno de mis programas necesitaba obtener registros de una tabla pero con la condición que esos registros no estuvieran en otra tabla, existen muchas formas de hacerlo en este post les mostrare tres opciones.

Seleccionar registros de una tabla que no están en otra, Opción 1:
Select * from tabla1 where not exists
(select 1 from tabla2 where tabla2.id = tabla1.id)

Muy importante, si el campo o los campos id de tu tabla esta indexados esta consulta va a ser súper rápida y estará muy optimizada en ese sentido por lo que no te dará problemas.

Seleccionar registros de una tabla que no están en otra, Opción 2:
Select * from tabla1 where tabla1.id 
not in (select tabla2.id from tabla2)

En esta segunda opción veremos el NOT IN, esta segunda opción a mi parecer es ineficiente porque a cada registro se ejecuta el  segundo SELECT, Si tu tabla2 es grande notaras de inmediato el tiempo de respuesta de tu server en devolver esta instrucción

Seleccionar registros de una tabla que no están en otra, Opción 3:
Select * from t1 left join t2 on t1.id=t2.id where t2.id is null 

También podemos hacer un LEFT JOIN de manera que seleccionaríamos los registros que no ha podido hacer el JOIN.

Son tres opciones interesantes, sé que puede haber más y mejores sentencias con esta finalidad, en lo personal me gustan las opciones 3 y 1, al final prefiero más la 1.
Hasta pronto!

Actualizar o Insertar un Registro en una sentencia ORACLE Y SQL Server

Hola buenas como están, hoy le compartiré un artículo interesante y útil para todos aquellos que desarrollan día a día, A continuación veremos cómo hacer una inserción o actualización en una misma sentencia(Actualizar o Insertar un Registro en ORACLE  Y SQL Server en la misma sentencia), resulta que a partir de la versión 9i de Oracle Database y a partir de SQL Server 2008 se incorpora una novedosa sentencia llamada MERGE(ahora es parte del estándar ANSI SQL). comúnmente cuando queríamos insertar/actualizar una tabla no vacía teníamos que hacer un INSERT o UPDATE, Con MERGE podemos tener esta lógica en una única sentencia SQL y así simplificamos el código.

A continuación les muestro la sintaxis de MERGE:
MERGE TABLA
USING (SELECT @ID AS ID) AS SRC ON SRC.ID = TABLA.ID
WHEN MATCHED THEN
UPDATE SET Campo1 = @Valor
WHEN NOT MATCHED THEN
INSERT (Campo1,ID) VALUES (@Valor,@ID)

En la línea 1 indicamos nuestra tabla en la cual se van a insertar los datos al igual que el select en la línea 2.
En línea 3 y 4 es donde le indicamos que si coinciden los campos anteriores realice entonces una actualización de ese registro, caso contrario en la línea 5 y 6 en donde indicamos que inserte el dato.
Existen varias soluciones para realizar este proceso de inserción o actualización en una sola sentencia ya sea en SQL Server o en Oracle, la siguiente personalmente la utilizaba antes para mis sistemas, pero por eficiencia utilizo mejor MERGE que anteriormente se los explique, de igual manera les comparto la solución.

La estructura de la consulta es la siguiente:

BEGIN
INSERT INTO MITABLA
(CAMPO1,CAMPO2;CAMPO3,CAMPO4) VALUES (1,'2','MIDESCRIPCION','MIDESCRIPCION2');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE MITABLA 
SET CAMPO2=22,CAMPO3='OTRADESCRIPCION',CAMPO4='OTRADESCRIPCION'
WHERE CAMPO1='PARAMETRO_ID' ;
END;

En una explicación breve, en la line 2 y 3 le indicamos que realice la inserción común y corriente, lo interesante acá sucede en la línea 4 y 5 que es donde le indicamos que si los campos llaves que definimos en la tabla se duplica entonces esto produce una excepción de duplicidad de llaves por lo que se ejecutara la siguiente instrucción que se refiere  6,7,8 en donde hacemos el UPDATE normal obviamente con el WHERE indicándole también nuestros campos llaves.

Espero les funcione y que les sea de mucha utilidad la información, será hasta la próxima saludos.

Error en SQL 2005 - If possible, restore from backup. If a backup is not available, it might be necessary to rebuild the log

Hola Buenas, en esta ocasión les compartiré una solución que la verdad les será muy útil cuando se les presente un problema de estos.
Bueno lo primero, solo para comentarles un poco, nuestro servidor de Base de Datos presento problemas con el Sistema operativo por lo que se reinstalo y por ende se debían de hacer los Attach necesarios a las bases de datos en producción o bien cargar los respaldos, en mi caso me incline al realizar el Attach...




Para mi sorpresa todas las bases de datos funcionaron a la perfección con el Attach solo una presento el siguiente error y por ende problemas…

An error occurred while processing the log for database 'DataElekCost'. If possible, restore from backup. If a backup is not available, it might be necessary to rebuild the log.
Could not open new database 'DataElekCost'. CREATE DATABASE is aborted. (Microsoft SQL Server, Error: 9004)

Como se solventa este error ?

Paso 1: Primero debes de crear una base de datos nueva con el mismo nombre a la que esta presentando problemas, luego detienes el servicio del SQL y reemplazas tus archivos .ldf y .mdf, seguido de esto volvemos a iniciar el servicio del SQL y si ingresamos nuevamente al Management Studio la base de datos se mostrara en estado sospechoso


Paso 2: Luego de esto lo que debemos de hacer es poner la base de datos en modo de emergencia (Emergency Mode) y se realiza con siguiente Comando:

ALTER DATABASE NombredetuBasededatos SET EMERGENCY

Al ejecutar este comando, desde el Management Studio el aspecto de nuestra base de datos cambiara a esta…



Paso 3: luego de esto ejecutamos el siguiente comando





Lo que estamos haciendo es pasando nuestra base de datos a SINGLE_USER.

Paso4: Luego de esto ejecutamos el comando DBCC CHECKDB con la opción REPAIR_ALLOW_DATA_LOSS a como se muestra en al imagen


Paso5: Finalizado este proceso debemos de pasar la base de datos de modo Single User a Multi User y lo hacemos con el siguiente comando

ALTER DATABASE SharePoint_Config SET MULTI_USER




Ya con esto tenemos nuestra base de datos lista y accesible
Espero sea de gran ayuda este aporte…

Saludos ;) y hasta la próxima…

Envío de Correos Desde SQL Server 2005

Saludos Amigos, esta vez explicare de manera sencilla como enviar un correo electrónico desde nuestro servidor de base de datos SQL SERVER 2005.
Como primer requisito tenemos que ir a la opción del menú de Microsoft SQL Server 2005 >> Configuration Tools >> SQL Server Surface Area Configuration.. Más fácil como lo muestra la siguiente imagen.



Inmediatamente aparecerá la ventana de configuración en donde ustedes darán clic en Surface Area Configuration for Features.



En la ventana que se habre aparecerá un árbol de opciones por decirlo de algún modo, ustedes seleccionaran Database Mail y habilitaran la opción Enable Database Mail stored procedures



La otra opción que tienen que seleccionar es SQL Mail y habilitar la opción Enable SQL Mail stored procedures como lo muestra la imagen…



Excelente¡¡¡ hasta el momento están habilitadas las opciones para el envio de correos electrónicos nos falta configurar una cuenta y un perfil, esto para poder enviar nuestros correos electrónicos.
OK ahora necesitamos tener los siguientes datos (Que son los mismos necesarios para configurar una cuenta en Microsoft Outlook)
a) Dirección de Correo Electrónico
b) Un SMTP (Protocolo Simple de Transferencia de Correo)
Muchas veces los servidores SMTP requieren de autenticación (esto para confirma que son sus usuarios lo que están utilizando sus servidores) esto es solamente que ustedes faciliten sus correos y su respectiva contraseña…

Muy Bien¡¡¡ teniendo claro todo esto, ya con estos datos a la mano entonces ejecutamos el SQL Server Management Studio y nos vamos a Management >> Database Mail le damos clic derecho y seleccionamos la opción Configure Database Mail como lo muestra la imagen.



Muy bien ahora aparecerá un asistente al cual en la primera pantalla le daremos siguiente, después aparecerá otra la cual la dejamos con la opción que aparece por “Default” lo que nos dice es que se creara un nuevo perfil en donde especificaremos los SMTP etc.



Bien ahora nos aparecerá esta pantalla, acá en el campo Profile name le ponemos un nombre al perfil seguido de alguna descripción que ustedes quieran (muy importante recordar el nombre del Profile) en mi caso le puso al perfil ProfileCorreo. Seguido de esto debemos de crear una cuenta SMTP al perfil para esto presionamos el botón Add…



Al presionar el botón aparecerá la siguiente pantalla en donde debemos de ingresar la Account name (nombre de cuenta, poner la que gusten), la Description , E-Mail address (Correo a utilizar para enviar los E-Mails), Display name (Nombre a Mostrar a la persona que le llegue el Correo), Reply e-mail (correo electrónico de respuesta, por lo general seria el mismo de E-Mail address) Server Name ( Seria el Nombre del Servidor, acá pondrían el SMTP) , además si se requiere autentificación seleccionar Basic authentication (En esos campos iría su correo electrónico en User name y su contraseña que utiliza para abrirlo), más específicamente en la siguiente imagen...



Después de insertar los datos necesarios presionamos ok, vemos como nuestra cuenta se agrega en la ventana de configuración...



Presionamos siguiente y aparecerá una ventana similar al en la cual seleccionamos la cuenta que acabamos de crear y consecutivamente le damos siguiente...



Luego de esto presionamos siguiente, y aparecerá otra ventana de parámetros, la dejamos tal como está y presionamos nuevamente siguiente, seguidamente aparecerá una ventana de todas las acciones que acabamos de aplicar a la cual le damos también finalizar…
Si todo lo hemos hecho bien y al pie de la letra aparecerá esta ventana en la cual se configurara todo lo anterior aplicado por lo que no debe de surgir ningún error… entonces presionamos el botón cerrar.



Excelente¡¡¡¡ ahora solo nos queda enviar un correo electrónico de prueba, por lo que nos dirigimos a Management >> Database Mail le damos clic derecho y seleccionamos la opción Sent Test E- Mail como lo muestra la imagen.



Nos mostrara una Ventana en donde seleccionamos el perfil que creamos anteriormente, ingresamos el correo electrónico al que queremos enviar el mensaje seguido del asunto y del cuerpo en si del correo, después de esto presionamos Send Test E-Mail



Solo nos queda esperar a que nos llegue el correo electrónico a nuestro buzón… y listo ya tenemos el SQL Server 2005 configurado para el envío de E-Mails…



Ahora se preguntaran ¿?? Y para que sirve todo lo que acabamos de hacer jajaja…. Pues bien en otra ocacion les enseñare la gran utilidad que tiene todo lo anterior explicado…

Referencia
http://www.kodyaz.com/articles/sql2005-database-mail.aspx

Que la Pasen de lo Mejor¡¡¡ Muchas Bendiciones…..

Obtener Estructura de una Tabla (Metadatos) en SQL Server 2005

Cada vez que surge un problema obviamente se debe de buscar la solución, pues eso es lo que hicimos ya que necesitábamos realizar una consulta de esta índole y después de mucho buscar el resultado fue el siguiente.

Primeramente tenemos esta nuestra base de datos llamada “Universidad” y una tabla llamada “Estudiantes”







Ahora si aplicamos esta Consulta devolverá los nombres de los Campos de una tabla, tipo de Dato de un Campo, Si permite Null y el tamaño, cabe mencionar que tienes que sustituir “Universidad” por el nombre de tu base de datos y “Estudiantes” por el nombre de la Tabla…

SELECT
COLUMN_NAME AS Nombre_Campo,
data_type AS Tipo_Dato,
is_nullable AS Permite_Null,
Character_Maximum_length as Tamaño_campo
FROM
Universidad.INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = 'Estudiantes'

Entonces el Resultado sería el Siguiente:













Que se diviertan :)