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

Generating Dummy Data for Testing


Generating Dummy Data for Testing

I have worked on a number of projects where there hasn’t been enough data to test reports and extracts and other database applications. The database was a third party database and the vendor wouldn’t allow data to be entered via the back end. We didn’t have enough data to test response times or to tune SQL until after GO-Live. This caused a lot of rework after GO-Live which in turn affected the perception of quality of the project as a whole.
The purpose of this article is to provide a means of generating random data which can be inserted into a database for testing purposes.

Como copiar la estructura de una tabla

Para copiar la estructura de una tabla sin copiar la data debemos utilizar este comando:

SELECT *
INTO my_new_table
FROM my_old_table
WHERE 1=2

Enviar correo electrónico en un formato tabular utilizando el correo electrónico de la base datos SQL Server

Enviar correo electrónico en un formato HTML utilizando el correo electrónico de la base datos SQL Server

Más allá de las bases de datos relacionales

supernova

Las bases de datos relacionales, como MySQLPostgreSQL y varios productos comerciales, nos han servido bien durante muchos años. Últimamente, sin embargo, ha habido mucha discusión sobre si el modelo relacional está llegando al final

Cannot resolve the collation conflict between "Modern_Spanish_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

El día de hoy estaba trabajando con unas tablas de unas bases de datos del servidor en donde trabajo... y al realizar una consulta, me arrojaba un error sobre su COLLATION (intercambio de caracteres entre columnas). Un error así...:

Cannot resolve the collation conflict between "Modern_Spanish_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

Los 10 errores mas comunes al programar orientado a objetos en PHP

El dominio de la programación orientada a objetos es, sin duda, uno de los paradigmas más codiciado por los programadores. Sin embargo, muchas veces estos cometen "atrocidades" al intentar implementarlo solo por decir a sus amigos, empresas u otros "Yo sé programar orientado a objetos".

Los 21 errores más comunes al programar con php

Leyendo en Zend.com, encuentro una completa lista de errores comunes de los programadores de PHP.
Aunque muchos de los que programamos constantemente en PHP hemos superado varios puntos, siempre hay cosas en las que caemos, pudiendo mejorar la calidad de nuestro código.

Los errores están divididos en 3 partes, siendo los primeros

SNAPSHOT DATABASE

Han visto que el Object Explorer en el SQL Server Management Studio donde se encuentran las bases de datos hay una carpeta que dice Database Snapshots.

Esto puedo confundir mucho ya que pareciera que fuera parte de la replicación pero no es así, realmente es una base de datos sólo lectura, estática basada en una base datos normal (fuente).

En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.

Cuál es su función:
Pueden ser utilizados para los informes. Asimismo, en el caso de un error del usuario en una base de datos de código fuente, puede restaurar la base de datos fuente al estado en que estaba cuando se creó el snapshot.

La pérdida de datos se limita a las actualizaciones de la base de datos desde su creación de la instantánea. Además, la creación de una snapshot de base de datos puede ser útil inmediatamente antes de hacer un cambio importante de una base de datos, como cambiar el esquema o la estructura de una tabla.

Tiene 3 posibles usos:


• Mantener los datos históricos para la generación de informes (Reporteria)
• Protección de datos de errores de usuario (Backup).
• La gestión de una base de datos de prueba (Base datos de pruebas)

Importante:
Database snapshots, fueron introducidos en SQL Server 2005, sólo están disponibles en las ediciones Enterprise de SQL Server 2005, SQL Server 2008 y SQL Server 2008 R2.

En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.

Crear una base datos snapshots



SNAPSHOT CREATE DATABASE AdventureWorks_dbss1800 ON
( NAME = AdventureWorks_Data, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )
AS SNAPSHOT OF AdventureWorks
;


Si hacer un restore de en base a un SNAPSHOT seria de la siguiente manera:

Restore


USE master
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO


Que permisos necesito para crear una:
La única manera de crear una SNAPSHOT CREATE DATABASE es utilizar Transact-SQL. Cualquier usuario que pueda crear una base de datos puede crear una snapshot de base de datos, sin embargo, para crear una instantánea de una base de datos reflejada, usted debe ser un miembro de la función de servidor sysadmin.

Articulo de referencia:
http://msdn.microsoft.com/en-us/library/ms175469.aspx
http://msdn.microsoft.com/en-us/library/ms187054.aspx
http://www.sqlcoffee.com/Tips0004.htm

LINQ paralelo ( PLINQ ) para SQL server

Lo primero es que no corre con el framework 3.5 tiene que trasladarse ya al 4.0

Los procesadores multinúcleo ya están aquí. Los procesadores multinúcleo solo estaba disponibles para servidores y PCs de escritorio. Pero ahora, ya se están usando en teléfonos móviles y PDA, lo cual genera grandes ventajas en relación con el consumo de energía. En respuesta al aumento de disponibilidad de plataformas con procesadores multinúcleo, Parallel Language Integrated Query (PLINQ) ofrece una manera fácil de sacar partido del uso de hardware paralelo, incluidos equipos tradicionales con varios procesadores y la última ola de procesadores multinúcleo.

PLINQ es un motor de ejecución de consultas que acepta cualquier consulta LINQ to Objects o LINQ to XML y usa automáticamente varios procesadores o núcleos para su ejecución cuando estos están disponibles. El cambio en el modelo de programación es minúsculo, lo cual significa que no es necesario ser un gurú para usarlo.

Usar PLINQ es casi exactamente lo mismo que usar LINQ to Objects y LINQ to XML. Puede usar cualquiera de los operadores disponibles.


Ejemplos con conexión a base de datos.

Linq
var query = from c in db.Customers
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };

plinq
var query = from c in db.Customers.AsParallel()
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };


El genio Joe Duffy es el responsable de desarrollo del equipo Parallel FX de Microsoft y participa habitualmente en el blog www.bluebytesoftware.com/blog. Está escribiendo un libro, Concurrent Programming on Windows, que va a ser publicado por Addison-Wesley.

XSS – Cross-Site-Scripting IV

Defendiendo Nuestros Usuarios.


Las formas más sencillas de defender nuestros usuarios son mediante las siguientes acciones:

Cookies:

Evitar almacenar datos vitales

XSS – Cross-Site-Scripting III

Defendiendo Nuestra Aplicación.


El primer modo de defensa que veremos, será la defensa de nuestra aplicación, misma que nos enseñara técnicas sencillas para defender nuestro sitio mediante la validación de entradas de datos.


Tenemos que tener claro que lo que debemos hacer es impedir la entrada de scripts en nuestros campos de inserción de datos, validando cada entrada para asegurarnos que no contenga código que pueda afectar nuestra aplicación o a nuestros usuarios.




  1. Limitación de caracteres de entrada.
    Lo primero que debemos hacer

XSS - Cross-Site-Scripting II

Al referirnos al Cross-Site-Scripting podemos encontrar bastante material didáctico acerca del tema, algunos de ellos describen los modos de ataques como directos e indirectos, pero realmente creo que podemos simplificar y enfocar de una forma mas directa en dos simples componentes que son:


1. Ataque al usuario.
2. Ataque al Aplicativo.


XSS - Cross-Site-Scripting I

El Cross-Site-Scripting, conocido también como XSS por sus siglas en ingles, es una vulnerabilidad que muchos desarrolladores dejan pasar por alto, quizás por falta de un planeamiento de análisis de riesgos en el proceso de diseño, desarrollo e implementación de sus aplicativos, o simplemente no lo vean como una falla que les va a presentar problemas en su aplicación, incluso por desconocimiento de esta vulnerabilidad.


MariaDB, La Hermanita Menor de MySQL

Es por todos sabido que Oracle ha adquirido Sun, y con ello lo que Sun había adquirido meses atrás, hablo en concreto de MySql.


MySql es o era (no sé cuál de los dos calificativos es correcto) el sistema de bases de datos Open Source más famoso y utilizado en el mundo.


Sin embargo, ahora tenemos que Sun forma definitivamente parte de Oracle, y Oracle tiene ahora la "patita" en máquinas de Sun, la "pattita" en lenguajes con Java, y la "patita" de bases de datos con MySql, pero Oracle es famosa precisamente por tener un gestor de bases de datos muy poderoso, el propio Oracle que da nombre a la compañía, así que, ¿qué hacer con MySql?.


Hay que tener en cuenta además, que la sombra de Oracle es muy larga y lo suficientemente ancha como para ocultar a MySql de la faz de la tierra. La incertidumbre por lo tanto, es bastante grande con respecto al futuro de MySql.


De momento no ha hecho nada "raro" con MySql, sin embargo, hay mucha gente que comenta que Oracle va a empezar a cobrar soporte con MySql y en el futuro...:s ya veremos qué...;) igual incluso hasta desaparece...


Aún y así, un irreducible finlandés no se va a quedar de brazos cruzados.
Hablo de Ulf Michael Widenius a quién se le conoce con el apodo de "Monty" (blog de Monty).


Monty es el principal autor de MySql y miembro fundador de MySql AB, empresa que fue adquirida en Febrero de 2008 por Sun Microsystems como comentaba anteriormente. Por la nada depreciable cantidad de 16 millones de € ($ 252883200 MXN).


Con la venta de MySql, Monty se embolsó mucho dinero y en Febrero de 2009 dejó Sun para montar una nueva compañía. Los motivos por los que dejó Sun no están claros.


Lo peor para Oracle, es que Monty se ha puesto a crear un nuevo motor de bases de datos de datos teniendo en mente a MySql y agregándoles "esas" cosas que quería haberle agregado a MySql en su día y que por las razones que sean, no ha podido llevar a cabo.


La iniciativa de Monty tiene que ver sobre todo con la adquisición de Sun por parte de Oracle.


Adquisición maestra, ya que se ha manejado la situación estratégica de forma expecional. Primero Sun compra MySql,  todo normal y coherente, no!?.


Luego Oracle compra Sun, y aquí aparecen las dudas. Monty duda de la compra (seguramente se sintió engañado/decepcionado/triste como amante de un sistema gestor de bases de datos abierto).


El departamento de la libre competencia de la Unión Europea analiza entonces si vulnera la libertad, pero aunque Oracle y Sun tienen un frente común en el mundo de las bases de datos, no es menos cierto que al tener Sun sus departamentos de Hardware y Software con Java a la cabeza, se ha hecho claramente la vista gorda sobre MySql.


Sin dudas, siento que esto ya estaba pactado de ante mano y Monty fue engañado. Quitaron a MySql, y así Oracle solo tendría un único competidor real y de importancia, hablo de SQL Server.


Al menos a Monty le quedó la tranquilidad de haberse hecho rico. Pero Monty es como comentaba antes, un hombre irreducible y tenía pensado vengar su honor como si de un duelo se tratara.


En Internet apareció entonces una iniciativa impulsada por el propio Monty para salvar a MySql, hecho que motivó que Monty se adentrara en esta aventura.


El producto en el que anda trabajando se llama MariaDB. El nombre de Maria se debe a su hija menor.


En realidad, MariaDB es un fork (bifurcación, branch o rama) que parte del código base de MySql. Es decir y como ellos lo comentan en el wiki de la página MariaDB es un upgrade de MySQL.


La empresa de Monty encargada de llevar a cabo la aventura de MariaDB se llama Monty Program AB.


El icono elegido por Monty en este caso es una foca, icono que posiblemente utilice para sus distribuciones.




MariaDB Logo
MariaDB Logo


Ahora bien... ¿cuál es la versión actual de MariaDB?.
La versión actual es MariaDB 5.2.0 Beta que está basada en MySql 5.1.


Monty afirma que esta versión es estable, aunque no quiere decirlo muy alto porque es una versión en desarrollo y por lo tanto, no debería ser utilizada en producción.


El caso es que a Oracle le ha salido un emergente y posible competidor, porque el irreducible Monty no tiene pensado dejar tirada a la Comunidad y va a hacer todo lo posible por sacar adelante el proyecto de MariaDB.


Por su hija y por él mismo, va a luchar para prevalecer su honor. Una noticia que personalmente celebro de pie.

Diferencias entre TRUNCATE y DELETE en MySQL

Si os habeis preguntado alguna vez las diferencias entre truncate y delete en la base de datos MySQL Server. Aquí os pongo una pequeña explicación de cuando utilizar una u otra.


TRUNCATE


Este comando borra todas las filas de una tabla sin registrar las eliminaciones individuales en el log de transacciones.


Por ejemplo:


[sourcecode lang="sql"]TRUNCATE Cursos;[/sourcecode]


Borra todos los registros de la tabla Cursos


DELETE


DELETE borra las filas de una tabla, pero registra las eliminaciones individuales en el log de transacciones. Podemos utilizar la clausula WHERE para filtrar las filas que necesitemos eliminar.


Ejemplo:


[sourcecode lang="sql"]DELETE FROM Cursos  WHERE CursoId = 50;[/sourcecode]


DIFERENCIAS ENTRE TRUNCATE Y DELETE




  • Ambas eliminan los datos, no la estructura.

  • Solo DELETE permite la eliminación condicional de los registros.

  • DELETE es una operación registrada en el log de transacciones y trucate no.

  • TRUNCATE es una operación registrada en el log de transacciones, pero como un todo, en conjunto, no por eliminación individual. TRUNCATE se registra como una liberación de las páginas de datos en las cuales existen los datos.

  • TRUNCATE es más rápida que DELETE.

  • Ambas se pueden deshacer con un ROLLBACK.

  • TRUNCATE reiniciará el contador para una tabla que contenga una columna IDENTITY.

  • DELETE mantendrá el contador de la tabla para una columna IDENTITY.

  • TRUNCATE es un comando DDL(lenguaje de definición de datos) mientras que DELETE es un DML(lenguaje de manipulación de datos).

  • TRUNCATE no desencadena un TRIGGER, DELETE sí.

  • TRUNCATE recrea una tabla.


CUANDO USARLAS




  • Usar Truncate es más rapido que Delete si vas a borrar toda una tabla y no te importan los indices(identity) o bien quieres resetearlos.

  • Usar Delete para borrados selectivos.

  • Usar Delete en caso de tener Foreign Key, es decir .. usarla en caso de borrados en cascada.

Corriendo Wordpress ¿En SQL Server?

Creo que la posibilidad de correr Wordpress con SQL Server será del agrado de muchos, ya que por fin existe una solución tanto de forma local como en la nube mediante el uso de Windows Azure SQL Azure.


Existen dos formas de realizar la instalación:




  • Distribución: esta es la forma más fácil de empezar. Incluye la última versión de Wordpress con el parche de SQL Server ya aplicado.

  • Parche: son únicamente los archivos modificados, mismos que pueden ser aplicados a la versión de Wordpress que descargues.


El propósito de este parche es proporcionar una abstracción en la estructura de la base de datos dentro de Wordpress, causando un mínimo de errores en el core de Wordpress y sin perdidas en las características del CMS.


El tutorial completo de instalación consta tan sólo de 8 pasos.


Enlace: Download WordPress on SQL Server Distro & PatchWordpress on MicrosoftGetting Started

Microsoft Visual Studio 2010 En Castellano

Visual Studio 2010 es la nueva versión del entorno de desarrollo integrado para sistemas Windows que incorpora nuevas características mejoradas que hacen que todo el proceso de desarrollo, desde el diseño a la implementación, sea más sencillo.

Con este lanzamiento Visual Studio 2010 cuenta con versiones en inglés, francés, alemán, japones y español.

Visual Studio 2010 dispone de las soluciones, 2010 Profesional, 2010 Premium, 2010 Ultimate y Test Profesional 2010 que podrás compararse desde www.microsoft.com.

Interesados pueden encontrar más información acerca de Visual Studio 2010 así como acceder a la compra o descarga de una versión de prueba desde www.microsoft.com.

Los diez errores más comunes en el diseño de una base de datos

Hola SQLeros,Louis Davidson es un experto en el diseño de Base de Datosy es autor del libro SQL Server 2005 Database Design and Optimization en el artículo aquí enlazado presenta los diez errores más comunes en el diseño de una BD que el ha detectado a lo largo de su experiencia:




  • Mala planeación del diseño

  • Ignorar la normalización

  • Estándares de nomenclatura deficientes

  • Falta de documentación

  • Una sola tabla para guardar todos los valores del dominio

  • Usar columnas GUID como la única llave de una tabla

  • No usar las funcionalidades SQL para preservar la integridad de los datos

  • No usar Stored Procedures para acceder a los datos

  • Intentar construir objetos genéricos en los stored procedures

  • Falta de pruebas


En mi experiencia la mayoría de los desarrollos donde he trabajado presentan algunas de estas deficiencias en su base de datos. Creo yo que en muchos de los casos es porque se deja a un programador diseñar la base cuando debe ser haber un DBA involucrado en el proceso. Se que muchos proyectos no pueden pagar el sueldo de un DBA en exclusivo pero creo que al menos debe haber un DBA por organización que supervise el diseño elaborado por los programadores, lo mejore y le de su visto bueno.
Con las bases de datos pasa como con el diseño web, cuando se deja en manos de un programador elresultado puede ser un desastre e imagino que la mayoría de ustedes ha tenido que lidiar con chapuzas como una tabla totalmente desnormalizada (digo a veces está bien desnormarlizar para ganar en desempeño pero hay límites) y que necesita de 5 o más campos para tener una llave compuesta (y dile adios a tu idea de usar un ORM para la capa de datos), o una tabla con 20 campos que se llaman campo1, campo2, .. campoN y que nadie en la organización sabe que diablos es el campo7 o quién era el encargado de actualizarlo pero sin él tu aplicación no funciona, en fin no seguiré descargando mi frustración aquí :P . En mi opinión una forma de evitarle frustraciones a los otros programadores es que, dado que las empresas no van a querer pagar un DBA para auxiliarte en el 70% de los casos,nosotros nos documentemos con artículos como el de Louis para realizar un mejor trabajo que programar no es solo usar Spring o el último patrón de diseño.

Crear Servicio Web En PHP Con NüSoap

1.- Para que funcione el ejemplo descárgate las clases de NüSOAP desde la pagina del proyecto http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap.

3.- Luego ejecutas en tu Servidor MySQL el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Luego crea una pagina PHP (en este ejemplo la pagina se llama servicioweb.php) y codificas lo siguiente:
[sourcecode language="php"]
< ?php
require_once('lib-nusoap/nusoap.php');

$server = new soap_server;

$ns="http://localhost/aplicativo"; // espacio de nombres; Sitio donde estará alojado el web service
$server->configurewsdl('MiWebService'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;

/************ REGISTRANDO EL ARRAY A DEVOLVER(array de productos) **************/
$server->wsdl->addComplexType(
'ArregloProductos', // Nombre
'complexType', // Tipo de Clase
'array', // Tipo de PHP
'', // definición del tipo secuencia(all|sequence|choice)
'SOAP-ENC:Array', // Restricted Base
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Productos[]') // Atributos
),
'tns:Productos'
);

/************ REGISTRANDO LA ESTRUCTURA DE DATOS PRODUCTOS **************/
$server->wsdl->addComplexType('Productos', 'complexType', 'struct', 'all', '',
array(
'ProductoID'=> array('name' => 'ProductoID','type' => 'xsd:int'),
'Nombre' => array('name' => 'Nombre', 'type' => 'xsd:string'),
'Precio' => array('name' => 'Precio', 'type' => 'xsd:string')
)
);

/*METODO DEL WEB SERVICE*/
function ListarProductos($estado){
if($estado!=''){
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_ListarProductos('%s');",$estado); //intentando filtrar el SQL Injection
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra
$db->close();
$i=0;
if($result->num_rows>0){
while($row = mysqli_fetch_assoc($result)){
$toc[$i]['ProductoID'] = $row["producto_id"];
$toc[$i]['Nombre'] = $row["nombre"];
$toc[$i]['Precio'] = $row["precio"];
$i++;
}
$result->free; //liberando memoria
return $toc;
}
}
return '';
}

/************ REGISTRANDO EL METODO **************/
$server->register(
'ListarProductos', // Nombre del Método
array('estado' => 'xsd:string' ), // Parámetros de Entrada
array('return' => 'tns:ArregloProductos') //Datos de Salida
);

/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : implode("\r\n", file('php://input'));
$server->service($input);
exit;
?>
[/sourcecode]



Si deseas puedes descargar el ejemplo completo desde aquí. Varios usuarios me han hecho la observación en la cual no funciona el código, esto es por el nombre de la carpeta comprimida que llame SQLeros-NüSoapEjemplo.zip, para que funcione bien solo cambienle el nombre por: SQLeros-NuSoapEjemplo.zip

También veremos como consumir el servicio desde C#,VB.Net y Java. Saludos