complementos SQL
Parade sql generar este tipo de consultas lo más sencillo es utilizar el asistente de consultas de Access, editar la sentencia SQL de la consulta y pegarla en nuestro código. No obstante este tipo de consulta se consigue de la siguiente forma:
SELECT DISTINCTROW Lista de Campos a Visualizar FROM Tabla
WHERE CampoDeBusqueda In (SELECT CampoDeBusqueda FROM Tabla As psudónimo
GROUP BY CampoDeBusqueda HAVING Count(*)>1 ) ORDER BY CampoDeBusqueda;
Un caso práctico, si deseamos localizar aquellose empleados con igual nombre y visualizar su código correspondiente, la consulta sería la siguiente:
SELECT DISTINCTROW Empleados.Nombre, Empleados.IdEmpleado
FROM Empleados WHERE Empleados.Nombre In (SELECT Nombre FROM
Empleados As Tmp GROUP BY Nombre HAVING Count(*)>1)
ORDER BY Empleados.Nombre;
16.1.2 Recuperar Registros de una tabla que no contengan registros relacionados en otra.
Este tipo de consulta se emplea en situaciones tales como sab
r que productos no se han vendido en un determinado periodo de tiempo,
SELECT DISTINCTROW Productos.IdProducto, Productos.Nombre FROM Productos
LEFT JOIN Pedidos ON Productos.IdProducto = Pedidos.IdProduct WHERE
(Pedidos.IdProducto Is Null) AND (Pedidos.Fecha Between #01-01-98# And
#01-30-98#);
La sintaxis es sencilla, se trata de realizar una unión interna entre dos tablas seleccionadas mediante un LEFT JOIN, establecimiendo como condición que el campo relacionado de la segunda sea Null.
16.2 Utlizar SQL desde Visual Basic
Existen dos tipos de consultas SQL: las consultas de selección (nos devuelven datos) y las consultas de acción (aquellas que no devuelven ningún registro). Ambas pueden ser tratadas en Visual Basic pero de forma diferente.
Las consultas de selección se ejecutan recogiendo la información en un recordset previamente definido mediante la instrucción openrecordset(), por ejemplo:
Dim SQL as String
Dim RS as recordset
SQL = "SELECT * FROM Empleados;"
Set RS=MiBaseDatos.OpenRecordSet(SQL)
Si la consula de selección se encuentra almacenada en una consulta de la base de datos:
Set RS=MiBaseDatos.OpenRecordset("MiConsulta")
Las consultas de acción, al no devolver ningún registro, no las podemos asignar a ningún recordset, en este caso la forma de ejecutarlas es mediante los métodos Execute y ExecuteSQL (para bases de datos ODBC), por ejemplo:
Dim SQL as string
SQL = "DELETE * FROM Empleados WHERE Categoria = 'Ordenanza';"
MiBaseDatos.Execute SQL
16.3 Funciones de Visual Basic utilizables en una Instrucción SQL
eliminacion
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.
ejemplo:
mplo DROP TABLE 'NOMBRE_TABLA';.
Sistemas de gestión de base de datos
Los sistemas de gestión de base de datos con soporte SQL más utilizados son, por orden alfabético:
- DB2
- Firebird
- HSQL
- Informix
- Interbase
- MariaDB
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- PervasiveSQL
- SQLite
- Sybase ASE
Respaldo de Bases de Datos maunuales
Para realizar un respaldo de las bases de datos por defecto, seguir los siguientes pasos:
- Bajar el servicio: se debe ejecutar desde un terminal (cmd), posicionado en el directorio <o3bpa-install>/o3bpa/bin el comando ./o3bpa stop
- Dentro del directorio de instalación de O3 BP&A, respaldar las siguientes carpetas:
BD Carpeta Ubicación BD XML / Exist exist <o3bpa-install>/jboss/standalone/data/exist/data BD Metrics metrics <o3bpa-install>/jboss/standalone/data/derby/metrics BD RBAC rbac <o3bpa-install>/jboss/standalone/data/derby/rbac - Reiniciar el servicio: posicionados en el mismo directorio, ejecutar el comando ./o3bpa start.
respaldos automaticos
el SQL SERVER full, las tareas de backup pueden automatizarse tranquilamente con un wizard muy simple, solo que este es limitado y a cada base de datos nueva que se incorpore tenes que programar de vuelta su correspondiente backup.
El script de más abajo te permite tener más control de los backups y además cada vez que se crea una base de datos nueva en tu servidor, este script hará el backup correspondiente de esa base sin que tengas que hacer nada.
El código es bastante simple...
DECLARE @BackupArchivo varchar(255), @DB varchar(30), @Descripcion varchar(255), @ArchivoAuditoria varchar(50)
DECLARE @Nombre varchar(30), @MediaName varchar(30), @BackupCarpeta nvarchar(200)
SET @BackupCarpeta= 'E:\BackupDB\BackupBasesDeDatos\'
--Aqui incluir todas las bases de datos que no queres que se hagan backup.
DECLARE CursorBasesDeDatos CURSOR FOR SELECT name FROM sysdatabases
WHERE name <> 'tempdb' AND name <> 'model' AND name <> 'Northwind'
OPEN CursorBasesDeDatos
FETCH next FROM CursorBasesDeDatos INTO @DB
WHILE @@fetch_status = 0
BEGIN
SET @Nombre = @DB + '( Daily BACKUP )'
SET @MediaName = @DB + '_Dump' + CONVERT(varchar, CURRENT_TIMESTAMP , 112)
SET @BackupArchivo = @BackupCarpeta+ + @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
SET @Descripcion = 'Normal' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
IF (SELECT COUNT(*) FROM msdb.dbo.backupset WHERE database_name = @DB) > 0 OR @DB = 'master'
BEGIN
SET @BackupArchivo = @BackupCarpeta+ @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--descripcion
SET @Descripcion = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
END
ELSE
BEGIN
SET @BackupArchivo = @BackupCarpeta+ @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--descripcion
SET @Descripcion = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
END
BACKUP DATABASE @DB TO DISK = @BackupArchivo
WITH NAME = @Nombre, DESCRIPTION = @Descripcion ,
MEDIANAME = @MediaName, MEDIADESCRIPTION = @Descripcion ,
STATS = 10
FETCH next FROM CursorBasesDeDatos INTO @DB
END
CLOSE CursorBasesDeDatos
DEALLOCATE CursorBasesDeDatos
El código de arriba tenes que guardarlo en un archivo de texto con extensión .sql. Ejemplo:BackupDeTodasLasBases.sql, y luego creas otro archivillo que lo podes llamar backup.bat. En el interior de este archivo debes escribir la siguiente sentencia:
sqlcmd -S .\SQLEXPRESS -U sa -P tupassword -i "E:\BackupDB\BackupDeTodasLasBases.sql" -o "E:\BackupDB\backup.log".
Luego, con el Windows Task Scheduler, programas que se ejecute el archivo backup.bat, las veces que quieras todos los días, a las horas que desees.
El script de más abajo te permite tener más control de los backups y además cada vez que se crea una base de datos nueva en tu servidor, este script hará el backup correspondiente de esa base sin que tengas que hacer nada.
El código es bastante simple...
DECLARE @BackupArchivo varchar(255), @DB varchar(30), @Descripcion varchar(255), @ArchivoAuditoria varchar(50)
DECLARE @Nombre varchar(30), @MediaName varchar(30), @BackupCarpeta nvarchar(200)
SET @BackupCarpeta= 'E:\BackupDB\BackupBasesDeDatos\'
--Aqui incluir todas las bases de datos que no queres que se hagan backup.
DECLARE CursorBasesDeDatos CURSOR FOR SELECT name FROM sysdatabases
WHERE name <> 'tempdb' AND name <> 'model' AND name <> 'Northwind'
OPEN CursorBasesDeDatos
FETCH next FROM CursorBasesDeDatos INTO @DB
WHILE @@fetch_status = 0
BEGIN
SET @Nombre = @DB + '( Daily BACKUP )'
SET @MediaName = @DB + '_Dump' + CONVERT(varchar, CURRENT_TIMESTAMP , 112)
SET @BackupArchivo = @BackupCarpeta+ + @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
SET @Descripcion = 'Normal' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
IF (SELECT COUNT(*) FROM msdb.dbo.backupset WHERE database_name = @DB) > 0 OR @DB = 'master'
BEGIN
SET @BackupArchivo = @BackupCarpeta+ @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--descripcion
SET @Descripcion = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
END
ELSE
BEGIN
SET @BackupArchivo = @BackupCarpeta+ @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--descripcion
SET @Descripcion = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
END
BACKUP DATABASE @DB TO DISK = @BackupArchivo
WITH NAME = @Nombre, DESCRIPTION = @Descripcion ,
MEDIANAME = @MediaName, MEDIADESCRIPTION = @Descripcion ,
STATS = 10
FETCH next FROM CursorBasesDeDatos INTO @DB
END
CLOSE CursorBasesDeDatos
DEALLOCATE CursorBasesDeDatos
El código de arriba tenes que guardarlo en un archivo de texto con extensión .sql. Ejemplo:BackupDeTodasLasBases.sql, y luego creas otro archivillo que lo podes llamar backup.bat. En el interior de este archivo debes escribir la siguiente sentencia:
sqlcmd -S .\SQLEXPRESS -U sa -P tupassword -i "E:\BackupDB\BackupDeTodasLasBases.sql" -o "E:\BackupDB\backup.log".
Luego, con el Windows Task Scheduler, programas que se ejecute el archivo backup.bat, las veces que quieras todos los días, a las horas que desees.
modificacion
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.
ejemploALTER TABLE 'NOMBRE_TABLA' ADD NUEVO_CAMPO INT UNSIGNED;
No hay comentarios:
Publicar un comentario