lunes, 29 de agosto de 2011

Eddy A. Velasco

La serie de Taylor

Si la función f y sus primeras n+1 derivadas son continuas, en un intervalo que contiene a y x, entonces el valor de la función esta dado por:

Con frecuencia es conveniente simplificar la serie de Taylor definiendo un paso h = xi+1 - xi  expresando la serie de Taylor como:
Eddy A. Velasco


supermercado

domingo, 28 de agosto de 2011

Eddy A. Velasco
Hacer copia de seguridad de una base de datos existente
Lo primero que haremos es hacer una copia de seguridad, que es la parte que en principio tiene menos problemas.
En el Explorador de objetos (el panel que suele estar a la izquierda y en el que se muestran las bases de datos que tienes en el servidor que hayas abierto), expande la rama de Bases de datos y selecciona la base de datos de la que quieres hacer la copia de seguridad, pulsa con el botón derecho (o mejor dicho, secundario, por si eres zurdo) y del menú emergente, selecciona Tareas y del submenú mostrado, Copia de seguridad... tal como puedes ver en la figura 1.
Figura 1. Hacer copia de seguridad de una base de SQL Server


Figura 2. Cuadro de diálogo para hacer la copia de seguridad

Figura 3. Indicar dónde guardar la copia

Figura 4. Cuadro de diálogo de copia de seguridad con copia en dos sitios

Figura 6. Si se hizo bien la copia, nos muestra este aviso

Figura 8. Cuadro de diálogo para restaurar una base de datos

Figura 9. Paso previo para indicar la ubicación de la copia de seguridad

También tendrás que marcar la opción Restaurar del cuadro de diálogo mostrado en la figura 8, (si no lo haces te dará un error).
Finalmente pulsa en el botón Aceptar y se realizará la restauración de la base de datos... o casi...
El casi es porque pueden ocurrir dos cosas (o más), una de ellas es que la base de datos ya exista, es decir, estés restaurando una base de datos que ya está en la lista de bases de datos de la instancia (o servidor) de SQL Server. En ese caso, tendrás que indicarle que sobrescriba la base de datos existente. Para indicarlo, en el cuadro de diálogo (figura 8), tendrás que pulsar en Opciones y seleccionar la opción Sobrescribir la base de datos existente (ver la figura 11).
Otro problema que puede ocurrir es que la ubicación en la que estaba la base de datos que se quiere restaurar estuviera en otro directorio diferente, y por supuesto que no exista en tu equipo.
En ese caso, te mostrará un mensaje de error como el de la figura 10.
Figura 10. Error al restaurar en una ubicación diferente a la original
Si este es el caso, pulsa en Opciones, y en la lista central verás que puedes indicar dónde debe restaurarse la base de datos (ver la figura 11).
Para indicar el directorio, puedes usar el botón o bien escribir directamente la ubicación.
Si pulsas en el botón para seleccionar el directorio de destino, el cuadro de diálogo de selección (como el de la figura 3) no te mostrará seleccionado ningún directorio, algo lógico, ya que esa ubicación no existe.
El destino puede ser cualquier carpeta, aunque lo recomendable es que sea la de datos de SQL Server, que en el caso de mi equipo que tiene la versión en español de Windows XP, es el directorio C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data, aunque ese directorio puede ser diferente, pero normalmente estará en la carpeta de instalación de SQL Server.
Además de la ubicación del fichero _Data, tendrás que indicar el del fichero _Log.
Figura 11. Opciones extras para restaurar una base de datos

Figura 12. Aviso de que se restauró correctamente la base de datos

Antes de poder hacer la restauración de la base de datos, tendrás que decirle dónde está la copia de seguridad. Para ello tendrás que marcar la opción Desde dispositivo y pulsar en el botón para seleccionar el fichero de copia de seguridad de la base mediante un cuadro de diálogo como el mostrado en la figura 3.
Aunque antes te habrá mostrado un cuadro de diálogo como el mostrado en la figura 9, en el que tendrás que pulsar en el botón Agregar para que se muestre el cuadro de diálogo de selección de la copia de seguridad.

Ahora vamos a restaurar una base de datos a partir de una copia de seguridad.
En el Explorador de objetos, pulsa con el botón secundario sobre el elemento Bases de datos y del menú desplegable, selecciona Restaurar base de datos... tal como te muestro en la figura 7.

Figura 7. Restaurar una base de datos
Si lo que vas a restaurar es una nueva base de datos, tendrás que escribir el nombre correspondiente en la caja de textos que hay junto a A una base de datos, en mi caso, la base de datos que voy a restaurar se llama elGuilleAniversario (ver la figura 8).

Si sabemos que ya existe una copia de seguridad anterior con el mismo nombre, deberíamos sobrescribir la copia de seguridad, ya que por defecto lo que se hará es "anexarla" con lo cual el tamaño del fichero será más grande, y puede que no sea lo que queríamos hacer.
En estos casos, debes pulsar en Opciones y marcar la opción Sobrescribir todos los conjuntos de copia de seguridad existentes, tal como puedes ver en la figura 5.
Figura 5. Sobrescribir los datos existentes en la copia de seguridad
Ahora solo tienes que pulsar en el botón Aceptar y si todo fue bien, te mostrará una viso de que la copia de seguridad se ha realizado correctamente (figura 6), en caso de que no haya sido así... pues te mostrará un error, así que... tendrás que revisar los pasos anteriores o que el disco tenga espacio, que tengas permisos suficientes para hacer la copia, etc.

Una vez escrito el nombre de la copia de seguridad, tendremos el valor que inicialmente nos mostró el Management Studio además del que nosotros hemos elegido, (ver la figura 4), como no necesitamos dos copias de seguridad, puedes borrar la indicada en el disco C (el de Archivos de programa). Para borrarla, la tendrás que seleccionar y pulsar en el botón Quitar.
Si dejas los dos nombres, se hará una copia en cada una de las ubicaciones que hayas indicado.

Al pulsar en el botón Agregar, te mostrará un nuevo cuadro de diálogo (ver figura 3), desde el que podrás elegir dónde se guardará la copia de seguridad.
Por ejemplo, en mi caso, quiero que se guarde en el disco E y en la carpeta bases, así que selecciono ese directorio (en la figura 2 se muestra reducido, pero es muuucho más alto), pero no solo vale con seleccionar el directorio, ya que hay que escribir el nombre del fichero de copia de seguridad, en mi caso, como la base de datos que estoy copiando se llama conImagenes2, el nombre que le he dado es conImagenes2.bak, aunque no es obligatorio usar ninguna extensión, pero como es un "backup", pues...

Esto te mostrará un cuadro de diálogo como el mostrado en la figura 2. Si quieres hacer la copia de seguridad en el directorio que SQL Server Express usa por defecto, simplemente puedes pulsar en el botón Aceptar para hacer la copia, pero si quieres elegir la ruta en la que se hará la copia, tendrás que pulsar en el botón Agregar... con idea de que puedas elegir donde quieres guardarlo.

Importar – exportar datos con SQL Server 2005

Para realizar estas operaciones SQL Server dispone de una herramienta en forma de asistente que nos guiará paso a paso. En el ejemplo importaremos una hoja de Excel a una tabla de SQL Server pero podríamos hacerlo al revés o importar tablas de Access.
Para realizar estas operaciones nos ponemos encima de la base de datos con la que queremos trabajar, en el ejemplo utilizaremos la base de datos AdventureWorks que viene con el SQL Server 2005 y con el botón derecho seleccionamos “Tareas” y del siguiente menú seleccionamos “Importar Datos” (pulsar encima de la imagenes para verlas completas)
La siguiente ventana es de información, pulsamos siguiente. Aparece la ventana para elegir el origen de los datos, en nuestro ejemplo seleccionamos Excel y elegimos un fichero de datos de Excel para importar
En la siguiente ventana elegimos el destino de los datos que vamos a importar, en el ejemplo utilizamos el propio SQL Server y la base de datos AdventureWorks
La siguiente ventana nos pide la forma que utilizaremos para extraer los datos, importaremos una o varias las tablas o vistas o utilizaremos una consulta determinada
Elegimos la primera opción y en la siguiente ventana nos aparece el listado de hojas de Excel disponibles para importar
Seleccionamos la única hoja de Excel que tenemos en el ejemplo y pulsamos siguiente donde nos pedirá qué queremos hacer con este paquete si ejecutarlo solo o ejecutarlo y guardarlo como un SSIS (antiguamente en SQL Server 2000 los DTS)
Después nos mostrará un resumen de todo el proceso
Y lo ejecutamos
Y con esto ya tenemos importada la hoja d Excel.
Una vez que has indicado la ubicación correcta, al pulsar en Aceptar, restaurará la base de datos y te avisará de que todo se hizo de forma correcta con un aviso como el mostrado en la figura 12.
Eddy A. Velasco

INNER JOIN
El INNER JOIN es otro tipo de composición de tablas, permite emparejar filas de distintas tablas de forma más eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento está indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo las filas que luego aparecen en el resultado.
La sintaxis es la siguiente:
FROM -tabla1- INNER JOIN -tabla2- ON -tabla1.col1-comp-tabla2.col2



Ejemplo:
SELECT *
FROM   empleado
       INNER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento

SELECT *
FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie

SELECT *
FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND (pedidos.producto = productos.idproducto)

SELECT *
FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN empleados ON pedidos.rep = empleados.numemp

SELECT *
FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep = empleados.numemp) ON pedidos.clie = clientes.numclie
Combinación externa (OUTER JOIN)
Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda.
En SQL:2003 no existe una notación implícita para las combinaciones externas.
Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha, o combinación completa.
de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)
El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda.
    La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.
A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el empleado cuyo departamento no existía; en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se presentará el empleado, cuyo departamento no existe.
Utilice una operación LEFT JOIN para crear una combinación externa por la izquierda. Las combinaciones externas por la izquierda incluyen todos los registros de la primera de las dos tablas (izquierda), incluso si no hay valores coincidentes para los registros en la segunda tabla (derecha).
H. Ejemplo de tabla izquierda para la combinación externa:
SELECT *
FROM   empleado
       LEFT OUTER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento


 
de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)
Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha.
    La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.
Utilice una operación RIGHT JOIN para crear una combinación externa por la derecha. Las combinaciones externas por la derecha incluyen todos los registros de la segunda de las dos tablas (derecha), incluso si no hay valores coincidentes para los registros en la primera tabla (izquierda).
I. Ejemplo de tabla derecha para la combinación externa:
SELECT *
FROM   empleado
       RIGHT OUTER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento


Funciones de agregado (Transact-SQL)
Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo valor. Si exceptuamos la función COUNT, todas las funciones de agregado ignoran los valores NULL. Las funciones de agregado se suelen usar con la cláusula GROUP BY de la instrucción SELECT.
Todas las funciones de agregado son deterministas. Esto significa que las funciones de agregado devuelven el mismo valor cada vez que se las llama con un conjunto específico de valores de entrada. Para obtener más información acerca del determinismo de las funciones, vea Funciones deterministas y no deterministas. La cláusula OVER puede seguir a todas las funciones de agregado, excepto CHECKSUM.
Las funciones de agregado sólo se pueden usar como expresiones en:
    La lista de selección de una instrucción SELECT (en una subconsulta o en la consulta externa).
    Cláusulas COMPUTE o COMPUTE BY.
    Cláusulas HAVING.
Transact-SQL proporciona las siguientes funciones de agregado:

o   AVG
Devuelve el promedio de los valores de un grupo. Los valores NULL se pasan por alto. Puede ir seguida de la cláusula OVER.

USE AdventureWorks2008R2;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

o   MIN
Devuelve el valor mínimo de la expresión. Puede ir seguida de la cláusula OVER
En el ejemplo siguiente se devuelve la tasa de impuestos más baja (mínima).
USE AdventureWorks2008R2;
GO
SELECT MIN(TaxRate)
FROM Sales.SalesTaxRate;
GO

o   CHECKSUM_AGG
Devuelve la suma de comprobación de los valores de un grupo. Los valores NULL se pasan por alto. Puede ir seguida de la cláusula OVER.
El ejemplo siguiente utiliza CHECKSUM_AGG para detectar cambios en la columna Quantity de la tabla ProductInventory en la base de datos AdventureWorks2008R2.
--Get the checksum value before the column value is changed.
USE AdventureWorks2008R2;
GO
SELECT CHECKSUM_AGG(CAST(Quantity AS int))
FROM Production.ProductInventory;
GO

o   Cláusula OVER
Determina las particiones y el orden del conjunto de filas antes de que se aplique la función de ventana asociada.
Las funciones de categoría: ROW_NUMBER, DENSE_RANK, RANK, NTILE utilizan la cláusula OVER. En el siguiente ejemplo se muestra el uso de la cláusula OVER con ROW_NUMBER.

USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName
    ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
    ,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
    INNER JOIN Person.Person p
        ON s.BusinessEntityID = p.BusinessEntityID
    INNER JOIN Person.Address a
        ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
    AND SalesYTD <> 0;
GO

o   COUNT
Devuelve el número de elementos de un grupo. COUNT funciona como la función COUNT_BIG. La única diferencia entre ambas funciones está en los valores devueltos. COUNT siempre devuelve un valor de tipo de datos int. COUNT_BIG siempre devuelve un valor de tipo de datos bigint. Puede ir seguida de la cláusula OVER.
                En el ejemplo siguiente se muestra el número de cargos diferentes que puede tener un empleado que trabaja en Adventure Works Cycles.

USE AdventureWorks2008R2;
GO
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO

o   ROWCOUNT_BIG
Devuelve el número de filas afectadas por la última instrucción ejecutada. Esta función actúa como @@ROWCOUNT, pero el tipo de valor devuelto de ROWCOUNT_BIG es bigint.
Sintaxis
ROWCOUNT_BIG ( )

o   COUNT_BIG
Devuelve el número de elementos de un grupo. COUNT_BIG funciona como COUNT. La única diferencia entre ambas funciones está en los valores devueltos. COUNT_BIG siempre devuelve un valor de tipo de datos bigint. COUNT siempre devuelve un valor de tipo de datos int. Puede ir seguida de la OVER (cláusula de Transact-SQL).
Sintaxis
COUNT_BIG ( { [ ALL | DISTINCT ] expression } | * )

o   STDEV
Devuelve la desviación típica estadística de todos los valores de la expresión especificada. Puede ir seguida de la cláusula OVER.
En el ejemplo siguiente se obtiene la desviación típica de todos los valores de bonos en la tabla SalesPerson.

USE AdventureWorks2008R2;
GO
SELECT STDEV(Bonus)
FROM Sales.SalesPerson;
GO

o   GROUPING
Indica si una expresión de columna especificada en una lista GROUP BY es agregada o no. GROUPING devuelve 1 para agregado y 0 para no agregado, en el conjunto de resultados. GROUPING sólo se puede usar en la lista de SELECT <selección>, cláusulas HAVING y ORDER BY cuando se especifica GROUP BY.
En el ejemplo siguiente se agrupa SalesQuota y se agregan las cantidades de SaleYTD. La función GROUPING se aplica a la columna SalesQuota.

USE AdventureWorks2008R2;
GO
SELECT SalesQuota, SUM(SalesYTD) 'TotalSalesYTD', GROUPING(SalesQuota) AS 'Grouping'
FROM Sales.SalesPerson
GROUP BY SalesQuota WITH ROLLUP;
GO

o   STDEVP
Devuelve la desviación estadística estándar para la población de todos los valores de la expresión especificada. Puede ir seguida de la cláusula OVER.
En el ejemplo siguiente se devuelve la desviación estándar de la población de todos los valores de bonificación de la tabla SalesPerson.

USE AdventureWorks2008R2;
GO
SELECT STDEVP(Bonus)
FROM Sales.SalesPerson;
GO

o   GROUPING_ID
Es una función que calcula el nivel de agrupación. GROUPING_ID solo se puede usar en la lista de <selección> SELECT, cláusulas HAVING u ORDER BY cuando se especifica GROUP BY.
                El ejemplo siguiente devuelve el recuento de empleados por Name y Title, Name, y total de la compañía. GROUPING_ID() se usa para crear un valor en cada fila de la columna Title que identifica su nivel de agregación.

USE AdventureWorks2008R2;
GO
SELECT D.Name
    ,CASE
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 0 THEN E.JobTitle
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 1 THEN N'Total: ' + D.Name
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 3 THEN N'Company Total:'
        ELSE N'Unknown'
    END AS N'Job Title'
    ,COUNT(E.BusinessEntityID) AS N'Employee Count'
FROM HumanResources.Employee E
    INNER JOIN HumanResources.EmployeeDepartmentHistory DH
        ON E.BusinessEntityID = DH.BusinessEntityID
    INNER JOIN HumanResources.Department D
        ON D.DepartmentID = DH.DepartmentID    
WHERE DH.EndDate IS NULL
    AND D.DepartmentID IN (12,14)
GROUP BY ROLLUP(D.Name, E.JobTitle);

o   SUM
Devuelve la suma de todos los valores o sólo de los valores DISTINCT de la expresión. SUM sólo puede utilizarse con columnas numéricas. Los valores Null se pasan por alto. Puede ir seguida de la OVER (cláusula de Transact-SQL).
En estos ejemplos se muestran las diferencias entre las funciones de agregado y las funciones de agregado de filas. En el primero se muestran funciones de agregado que solo ofrecen datos de resumen y en el segundo, funciones de agregado de filas que ofrecen datos de resumen y de detalle.

USE AdventureWorks2008R2;
GO
SELECT Color, SUM(ListPrice), SUM(StandardCost)
FROM Production.Product
WHERE Color IS NOT NULL
    AND ListPrice != 0.00
    AND Name LIKE 'Mountain%'
GROUP BY Color
ORDER BY Color;
GO

o   MAX
Devuelve el valor máximo de la expresión. Puede ir seguida de la cláusula OVER.
En el siguiente ejemplo se devuelve el tipo impositivo mayor (máximo).

USE AdventureWorks2008R2;
GO
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO        

o   VAR
Devuelve la varianza estadística de todos los valores de la expresión especificada. Puede ir seguida de la cláusula OVER.
Este ejemplo devuelve la varianza para todos los valores de bonificación de la tabla SalesPerson.

USE AdventureWorks2008R2;
GO
SELECT VAR(Bonus)
FROM Sales.SalesPerson;
GO

o   VARP
Devuelve la varianza estadística de la población para todos los valores de la expresión especificada. Puede ir seguida de la cláusula OVER.
El siguiente ejemplo devuelve la varianza para la población de todos los valores de bonificación de la tabla SalesPerson.

USE AdventureWorks2008R2;
GO
SELECT VARP(Bonus)
FROM Sales.SalesPerson;
GO