lunes, 27 de septiembre de 2010

MS SQL 2005: Crear un disparador (TRIGGER) sobre una vista (VIEW) que mande un e-mail al DBA

Supongamos que queremos que nuestro gestor de bases de datos nos avise cuando se modifiquen ciertos datos. En este caso concreto, quiero recibir un email a mi cuenta cuando los datos de una tabla no concuerden con los datos de otra (es decir, que la cantidad de un artículo que hay en una tabla sea diferente a la cantidad de ese mismo artículo en otra tabla). Parece lioso, pero se ve rápido con un ejemplo:

TABLA datos_almacen

Codigo_articulo varchar(16)
Cantidad decimal(12,3)

TABLA datos_almacen_2

Codigo_articulo varchar(16)
Cantidad decimal(12,3)

Entonces, si la cantidad del mismo artículo es diferente para las dos tablas, quiero que me avise. Supongamos que tengo la siguiente vista que muestra todos los artículos con diferencias:

CREATE VIEW mi_vista AS
SELECT *
FROM datos_almacen a inner join datos_almacen_2 b
on a.codigo_articulo = b.codigo_articulo
and a.cantidad <> b.cantidad

Correcto, esta vista muestra las diferencias (recuerda que estamos suponiendo que ambas tablas tienen los mismos códigos de artículo, si en uno hubiese más que en otro habría que hacer un JOIN lateral). Ahora el trigger para que salte cuando aparezca alguna diferencia:

MS SQL 2005: Crear una vista

Lo que hace una vista es devolver el resultado de una consulta de selección como si se tratase de un select, pero de forma que podemos impedir al usuario el acceso a las tablas sobre las que se ejecuta la consulta.

Un ejemplo:

CREATE VIEW mi_vista AS
select *
from mi_tabla

Ahora podemos quitarle permisos a un usuario sobre la tabla 'mi_tabla' pero darle permisos sobre la vista 'mi_vista' y el usuario podría consultar los datos de la tabla (los que nosotros, DBAs, queramos, jeje) sin tener acceso directo a la misma.

martes, 27 de julio de 2010

MYSQL: dar permisos a usuarios

GRANT [SELECT | UPDATE | etc.. ] ON [basedatos | *].[nombretabla | *] TO nombreUsuario

MYSQL: crear y borrar usuarios

Crear:

CREATE USER nombreUsuario IDENTIFIED BY 'password';

Eliminar:

DROP USER nombreUsuario;

MS SQL 2005: importar datos de una hoja excel a una bbdd

Microsoft explica en esta página varios métodos para hacerlo. El que yo he seguido y me ha funcionado a la primera ha sido el siguiente:

Utilizar un servidor vinculado

Después de haber vinculado un servidor ya podemos hacer una consulta del tipo:

SELECT * FROM nombreAsignado...[nombreHoja$]

miércoles, 21 de julio de 2010

PHP: conexión a base datos MICROSOFT SQL

Conseguir las DLLs

Lo primero que nos hace falta es conseguir las DLLs para conectarnos a un SQL Server, por defecto estas DLLs no van en el paquete de instalación automática, así que tendrás que bajar, si no lo tienes ya, el paquete con la instalación completa.

Descomprime el paquete con la distribución completa y busca el fichero "php_mssql.dll" que está dentro del directorio "extensions", copia este fichero al directorio "dlls" en donde tengas instalado el PHP.

Editar el PHP.ini

Ahora hay que decirle al PHP que tiene una librería nueva y que la debe usar. Así que editaremos el PHP.ini con el Notepad, normalmente el PHP.ini está en el directorio C:\WINNT.

Busca la línea en la que pone "extension_dir = " y modifícala para que apunte al directorio donde hemos copiado la DLL. Con esto le indicamos al PHP donde están las DLL de extensión.

Ahora busca la línea ";extension=php_mssql.dll" y modifícala quitándole el ";" del principio.

Graba el fichero PHP.ini y ya está.

Ejemplo de conexión

Solo nos queda probar que funciona la conexión con el servidor SQL Server, para ello vamos a conectarnos con la base de datos “Northwind” que viene como ejemplo en la instalación de SQL Server. Listaremos el nombre del producto y el precio de la tabla productos.

$conectID = mssql_connect("NombreServidor","SA","");
mssql_select_db("Northwind");
$result=mssql_query("select * from products",$numero );
while ($row=mssql_fetch_array($result)) {
$counter++; $c1=$row["ProductName"];
$c2=$row["UnitPrice"];
echo ("$counter c1: $c1 c2: $c2\n");
}
mssql_close($conectID);

Gracias a http://www.webestilo.com/php/articulo.phtml?art=19

martes, 6 de julio de 2010

PHP: conocer los índices y los contenidos de un array

Dada una variable cualquiera $mi_array, sabemos que es un array pero no sabemos más. Para conocer los índices y los valores almacenados en cada uno de estos índices, podemos usar el siguiente bucle que recorrerá todos los índices del array:

foreach ($mi_array as $key => $value) {

// Sentencias

}

En $key tendremos el valor del índice, mientras que en $value tendremos el valor almacenado en dicho índice.