Implementación de SQL y Capa de Datos en Aplicaciones de Gestión
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 35,66 KB
SqlParameter (En la capa de datos insertar y modificar):
Public Sub InsertarDisco(ByVal disco As SimcaEntidad.Disco)
Try
Me._conexion = New conexionBD
Dim param() As SqlClient.SqlParameter = New SqlClient.SqlParameter(2) {}
param(0) = New SqlClient.SqlParameter("@tipoDisco", SqlDbType.Int, 8)
param(0).Value = Convert.ToInt32(disco.TipoDisco)
param(1) = New SqlClient.SqlParameter("@nombreDisco", SqlDbType.VarChar, 200)
param(1).Value = disco.NombreDisco
param(2) = New SqlClient.SqlParameter("@precio", SqlDbType.Decimal, 8)
param(2).Value = CDec(disco.Precio)
Me._conexion.executeNonQuery("tbDisco_Insertar", param)
Catch ex As Exception
Throw New Exception("ERROR al tratar de insertar disco")
End Try
End Sub
Public Sub modificar(ByVal objDisco As Disco)
Dim objSqlParameters() As SqlClient.SqlParameter = New SqlClient.SqlParameter(2) {}
Dim objDatos As New conexionBD
objSqlParameters(0) = New SqlClient.SqlParameter("@tipoDisco", SqlDbType.Int, 8)
objSqlParameters(0).Value = Convert.ToInt32(objDisco.TipoDisco)
objSqlParameters(1) = New SqlClient.SqlParameter("@nombreDisco", SqlDbType.VarChar, 200)
objSqlParameters(1).Value = objDisco.NombreDisco
objSqlParameters(2) = New SqlClient.SqlParameter("@precio", SqlDbType.Decimal, 8)
objSqlParameters(2).Value = CDec(objDisco.Precio) Try
objDatos.executeNonQuery("tbDisco_Actualizar", objSqlParameters) Catch ex As Exception Throw New Exception("Error al modificar socio") End TryEnd Sub
SqlParameter datos borrar, getdiscos, actualizar stock:
Public Sub borrar(ByVal objDisco As Disco)
Dim objSqlParameter() As SqlClient.SqlParameter = New SqlClient.SqlParameter(0) {}
objSqlParameter(0) = New SqlClient.SqlParameter("@idDisco", SqlDbType.Int, 4)
objSqlParameter(0).Value = objDisco.IdDisco
Try
Dim objDatos As New conexionBD
objDatos.executeNonQuery("tbDisco_Borrar", objSqlParameter)
Catch ex As Exception
Throw New Exception("Error al borrar disco")
End Try
End Sub
Public
Try
Dim objDatos As New conexionBD
Return objDatos.executeDataSet("tbDisco_GetLista", Nothing)
Catch ex As Exception
Throw New Exception("Error al traer discos")
End Try
End Function
Public Sub ActualizarStock(ByVal disco As Disco, ByVal cantidad As Integer)
Try
Me._conexion = New conexionBD
Dim param() As SqlClient.SqlParameter = New SqlClient.SqlParameter(1) {}
param(0) = New SqlClient.SqlParameter("@idDisco", SqlDbType.Int, 8)
param(0).Value = disco.IdDisco
param(1) = New SqlClient.SqlParameter("@cantidad", SqlDbType.Int, 8)
param(1).Value = cantidad
Me._conexion.executeNonQuery("tbDisco_ActualizarStock", param)
Catch ex As Exception
Throw New Exception("ERROR al tratar de leer la Base de Datos")
End Try End Sub
Public Function TraerStockPorIdDisco(ByVal objDisco As Disco) As Integer
Dim objSqlParameter() As SqlClient.SqlParameter = New SqlClient.SqlParameter(1) {}
objSqlParameter(0) = New SqlClient.SqlParameter("@idDisco", SqlDbType.Int, 4)
objSqlParameter(0).Value = objDisco.IdDisco
objSqlParameter(1) = New SqlClient.SqlParameter("@stock", SqlDbType.Int, 4)
objSqlParameter(1).Direction = ParameterDirection.Output
Try
Dim objDatos As New conexionBD
objDatos.executeNonQuery("tbDisco_TraerStockPorIdDisco", objSqlParameter)
Return objSqlParameter(1).Value
Catch ex As Exception
Throw New Exception("Error al traer stock")
End Try
End Function
Public Function existeDisco(ByVal bandaArtista As String, ByVal nombreDisco As String, ByVal edicion As String) As Boolean
Dim objSqlParameter() As SqlClient.SqlParameter = New SqlClient.SqlParameter(3) {}
objSqlParameter(0) = New SqlClient.SqlParameter("@artista", SqlDbType.VarChar, 200)
objSqlParameter(0).Value = bandaArtista
objSqlParameter(1) = New SqlClient.SqlParameter("@nombre", SqlDbType.VarChar, 200)
objSqlParameter(1).Value = nombreDisco
objSqlParameter(2) = New SqlClient.SqlParameter("@edicion", SqlDbType.VarChar, 50)
objSqlParameter(2).Value = edicion
objSqlParameter(3) = New SqlClient.SqlParameter("@resultado", SqlDbType.Bit)
objSqlParameter(3).Direction = ParameterDirection.Output
Try Dim objDatos As New conexionBD
objDatos.executeNonQuery("tbDisco_ExisteDisco", objSqlParameter)
Return objSqlParameter(3).Value Catch ex As Exception Throw New Exception("Error al traer stock")End Try End Function
CAPA DE NEGOCIO
Imports SimcaDatos
Imports SimcaEntidad
Public Class DiscoNegocio
Public Sub InsertarDisco(ByVal objDisco As SimcaEntidad.Disco)
Try
Dim objDiscoDatos As New SimcaDatos.DiscoDatos
objDiscoDatos.InsertarDisco(objDisco)
Catch ex As Exception
Throw ex
End Try
End Sub
Public Function GetDiscos() As System.Data.DataSet
Dim objDiscoDatos As New DiscoDatos
Try
Return objDiscoDatos.getDiscos()
Catch ex As Exception
Throw ex
End Try
End Function Public Sub BorrarDisco(ByVal objDisco As Disco)
Dim objDiscoDatos As New DiscoDatos
Try
objDiscoDatos.borrar(objDisco)
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
Private Sub frmAltaDiscos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CargarComboGenero()
End Sub
Private Sub CargarComboGenero()
Dim objDiscoNegocio As New SimcaNegocio.DiscoNegocio
Dim ds As System.Data.DataSet
Try
ds = objDiscoNegocio.GetGeneros
cmbGenero.DataSource = ds.Tables(0)
cmbGenero.ValueMember = "Id"
cmbGenero.DisplayMember = "Descripcion"
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try End Sub
Private Function ValidarInput() As Boolean
If txtEdicion.Text = String.Empty Then
MessageBox.Show("Debe ingresar la edición del disco")
Return False
End If
If cmbBandaArtista.SelectedValue = 0 Then
MessageBox.Show("Debe seleccionar una Banda/Artista")
Return False
End If
Return True
End Function
CAPA GUI BOTON GUARDAR EN ALTA DISCO
Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
Dim objDiscoNegocio As New SimcaNegocio.DiscoNegocio
Dim objDisco As New SimcaEntidad.Disco
If Not ValidarInput() Then
ReturnEnd If
With objDisco
.Activo = True
.BandaArtista = CInt(Me.cmbBandaArtista.SelectedValue)
.NombreDisco = txtNombreDisco.Text
If Me.rbdVinilo.Checked = True Then
objDisco.TipoDisco = SimcaEntidad.Disco.EnumTipoDisco.Vinilo
Else
objDisco.TipoDisco = SimcaEntidad.Disco.EnumTipoDisco.CD
End If
.Genero = CInt(Me.cmbGenero.SelectedValue)
.Stock = txtStockInicial.Text
.Edicion = txtEdicion.Text
.Precio = txtPrecio.Text
End With
Try
objDiscoNegocio.InsertarDisco(objDisco)
MessageBox.Show("Se ha insertado con éxito el nuevo disco", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
LimpiarDatos()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Imports SimcaEntidad
Imports SimcaNegocio
Private Sub btnAceptarBaja_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptarBaja.Click
idDisco = dgBajaDiscos.SelectedRows(0).Cells("idDisco").Value
Dim objDisco As New Disco
Dim objDiscoNegocio As New DiscoNegocio
If idDisco = -1 Then
MessageBox.Show("Seleccione un disco para borrar")
Exit Sub
End If
objDisco.IdDisco = idDisco
Try
objDiscoNegocio.BorrarDisco(objDisco)
idDisco = -1
MessageBox.Show("Disco eliminado con éxito")
cargarDiscos()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
CONFIGURAR GRILLA!!
Private Sub configurarGrilla()
dgBajaDiscos.AllowUserToAddRows = False
dgBajaDiscos.AllowUserToDeleteRows = False
dgBajaDiscos.EditMode = DataGridViewEditMode.EditProgrammatically
dgBajaDiscos.MultiSelect = False
dgBajaDiscos.RowHeadersVisible = True
If dgBajaDiscos.ColumnCount > 0 Then
dgBajaDiscos.Columns("idDisco").Visible = False
dgBajaDiscos.Columns("tipodisco").Visible = False
dgBajaDiscos.Columns("Activo").Visible = False
End If
End Sub
Imports SimcaEntidad
Imports SimcaNegocio
Private Sub btnAceptarModificacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptarModificacion.Click
Dim objDisco As New Disco
Dim objDiscoNegocio As New DiscoNegocio
If Not ValidarInput() Then
ReturnEnd If
With objDisco
.IdDisco = idDisco
.Activo = True
.BandaArtista = CInt(Me.cmbBandaArtistaModif.SelectedValue)
.NombreDisco = txtNombreDisco.Text
If Me.rbdVinilo.Checked = True Then
objDisco.TipoDisco = SimcaEntidad.Disco.EnumTipoDisco.Vinilo
Else
objDisco.TipoDisco = SimcaEntidad.Disco.EnumTipoDisco.CD
End If
.Genero = cmbGenero.SelectedValue
.Edicion = txtEdicion.Text
.Precio = txtPrecio.Text
End With
Try
objDiscoNegocio.Modificar(objDisco)
MessageBox.Show("Disco modificado con éxito!!")
Catch ex As Exception
MessageBox.Show(ex.Message)
End TrycargarDiscos()
LimpiarControles()
End Sub
¿Qué es un SGDBR? Sistema Gestor de Base de Datos Relacional (SGDBR). Software que gestiona el uso de las bases de datos relacionales, y optimiza y controla el acceso al contenido de las mismas. El almacenamiento físico de los datos se gestiona, únicamente a través del gestor. El usuario solo debe preocuparse de la estructura lógica de los mismos. La manipulación de la estructura y contenido de una base de datos relacional se realiza mediante el lenguaje SQL (Structured Query Language). SGBDRs existentes son: PostgreSQL, MySQL, Oracle, Sybase, DB2, etc. Conceptos: Los usuarios de una base de datos no están relacionados con los usuarios del sistema. Al igual que en un sistema informático, existe la figura del administrador. En casi todos los SGBDRs, el administrador de una base de datos no tiene por qué ser el administrador del sistema. Un administrador crea los usuarios y les otorga o deniega privilegios (operaciones que pueden realizar). Un privilegio es: crear, modificar o borrar una tabla; consultar, insertar, borrar o modificar los datos de una tabla; consultar o crear una vista; crear usuarios o grupos; otorgar privilegios; etc. SQL es un lenguaje estándar de las bases de datos relacionales, con un dialecto por gestor. DDL (Data Definition Language): Es la parte del lenguaje que se ocupa de la gestión de la base de datos: creación y borrado de los usuarios, tablas, vistas, etc. gestión del control de acceso; manipulación de la estructura de las tablas; optimización del acceso a los datos; tipos de datos. DML (Data Manipulation Language): Es la parte del lenguaje SQL que se ocupa de las operaciones de inserción, borrado, actualización y consulta de datos. SQL Server Management Studio Provee un entorno centralizado integrado para la gestión de múltiples servidores, tareas y servicios. Las características incluyen: Explorador de Objetos, Editores Asistidos, Ventana de resumen, etc. Capas Ventajas: Centralización de los aspectos de seguridad y transaccionalidad, que serían responsabilidad del modelo. No replicación de lógica de negocio en los clientes: esto permite que las modificaciones y mejoras sean automáticamente aprovechadas por el conjunto de los usuarios, reduciendo los costes de mantenimiento. Mayor sencillez de los clientes.
Capa de Interfaz de Usuario (UI): Es la encargada de interactuar con los usuarios de la aplicación. Provee distintos componentes que encapsulan la lógica de visualización (formularios, páginas web, textbox, combobox, datagridview) que permiten al usuario ingresar y consultar información, y capturar los eventos de disparo que este genere para dichas necesidades.
En la capa de UI solo debe codificarse la lógica correspondiente a la visualización de la información, evitando en todo término la escritura de procesos de negocio o de acceso a datos. Para satisfacer las solicitudes (eventos) disparadas por el usuario, consume métodos / servicios provistos por la capa de negocio o servicios, y se comunica con ella utilizando Modelos o Entidades. Algunas funciones de la capa de UI: Validación de datos de Entrada: Debe realizar todas las validaciones correspondientes a la integridad del dato ingresado, por ejemplo que un campo numérico no contenga letras o símbolos o que un campo requerido sea ingresado. No realiza validaciones de negocio, como por ejemplo, validar que el socio que se desea insertar no esté duplicado en la BD. Toman datos del usuario Exponen información persistida en la BD a los usuarios. Capturan los eventos del usuario y llaman a funciones de control Restringen los tipos de entrada del usuario Validan la entrada de datos Interpretan acciones de usuarios Adquieren los datos utilizados por los componentes. Modelos o Entidades: Es una librería o biblioteca de clases que representan un modelo real de negocio. Son las clases que representan nuestro sistema y suelen coincidir con las entidades o tablas de la BD. Normalmente están compuestas únicamente de atributos, propiedades y constructores. Las distintas capas consumen sus clases (o entidades) para comunicarse entre sí. Capa de Negocio o Servicios: Es una librería o biblioteca de clases que implementa las reglas y servicios correspondientes al negocio empresarial que se está programando. Son los métodos que encapsulan la lógica del negocio de la aplicación. Generalmente recibe de la capa de IU Modelos o Entidades y les aplica los distintos procesos y validaciones correspondientes. Puede invocar objetos de la capa de acceso a datos para persistir dichos procesos BD. Satisface las solicitudes provenientes de IU.
Llamados por: Interfaces de servicios Componentes de procesos de usuario Flujos de trabajo empresariales Otros componentes empresariales. Capa de Datos
Determinar: Almacén de datos a utilizar Diseño de los componentes para acceder a los datos Formato de datos entre capas y la programación relacionada. Componentes Lógicos de Acceso a Datos Abstraen la semántica del almacén de datos Sin estado Separan el procesamiento empresarial de la lógica de acceso a datos. CRUD de entidades empresariales. Funcionalidad de los componentes de lógica de acceso a datos separar la lógica empresarial de los esquemas de almacenamiento Proveen un único acceso a datos Actúan en una tabla principal y sus relacionadas Uso de los Componentes Lógicos de Acceso a Datos Exponen CRUD, paginación Usan un componente de ayuda de acceso a datos Se recomienda el uso de SP. No deben: Invocar a otros componentes lógicos de acceso a datos. Más previsibles. Iniciar transacciones distribuidas. Mantener estado entre llamadas a métodos. SQL Server Management Studio (SSMS) Microsoft SQL Server Management Studio (SSMS) es una herramienta gráfica de administración fácil de usar incluida en todas las versiones de SQL Server. Ofrece herramientas gráficas para la administración de bases de datos, junto con un completo entorno de desarrollo. Permite obtener acceso y administrar Database Engine (Motor de base de datos), Analysis Manager y Analizador de consultas SQL en una sola herramienta, junto con la posibilidad de escribir instrucciones MDX, XMLA y XML de Transact-SQL. SQL Server provee 2 modos de autenticación. Al seleccionar un modo de autenticación para Database Engine (Motor de base de datos). Hay dos modos posibles: modo de autenticación de Windows y modo mixto. El modo de autenticación de Windows habilita la autenticación de Windows y deshabilita la autenticación de SQL Server. El modo mixto habilita tanto la autenticación de Windows como la de SQL Server. La autenticación de Windows está disponible siempre y no se puede deshabilitar. Explorador de objetos:
Proporciona una vista de todos los objetos del servidor y presenta una interfaz de usuario para administrarlos.
SP: Un SP es una colección de sentencias del Transact-SQL las cuales organizadas lógicamente resuelven algunas de las operaciones transaccionales que
requieren los usuarios, estos procedimientos se almacenan en la base de datos. Los procedimientos almacenados soportan el empleo de variables declaradas por el usuario, sentencias para toma de decisiones entre otras características. caract: Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al lote o al procedimiento que realiza la llamada. Contener instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos. Devolver un valor de estado que indica si la operación se ha realizado correctamente o ha habido un error. Permiten una ejecución más rápida, ya que los procedimientos son analizados y optimizados en el momento de su creación. Pueden reducir el tráfico de red. Pueden utilizarse como mecanismo de seguridad, ya que se puede conceder permisos a los usuarios para ejecutar un procedimiento almacenado, incluso si no cuentan con permiso para ejecutar directamente las instrucciones del procedimiento. 4 etapas: 1. Parseado: En esta fase se evalúa la sentencia SQL que se pretende ejecutar y se comprueba que no tenga errores de sintaxis, por ej que existan las tablas a interactuar, etc. Como salida del parseado, se obtiene una versión de la consulta 'limpia' y normalizada 2. Verificación de “Query plan” (plan de ejecución) en caché: Esto vendrá definido por el Plan de Ejecución. el objetivo es ahorrarse este paso en caso de que el usuario solicite la misma consulta posteriormente. En el segundo paso (verificación..) NO se elabora el plan de ejecución, solo se chequea si hay alguno que resuelva la consulta solicitada. 3. Compilación / optimización: En esta etapa, sqlserver analiza todas las formas posibles de obtener la consulta (es decir, elabora los distintos planes de ejecución). Elige el más eficiente de ellos. 4. Cacheado: Luego de obtener el plan de ejecución más eficiente, el motor de base de datos procede a almacenarlo en una caché para que la próxima vez que se lance la misma consulta no se tenga que recompilar.
Implementación: Estos procedimientos, se usan a menudo, pero no siempre, para realizar consultas SQL sobre los objetos del banco de datos de una manera abstracta, desde el punto de vista del cliente de la aplicación. Un store procedure (SP) permite agrupar en forma exclusiva parte de algo específico que se desee realizar o, mejor dicho, el SQL apropiado para dicha acción. Eliminación de un SP: DROP PROCEDURE nombreSP. Ventajas del uso de SP: Reutilización de código desde aplicaciones: Varias aplicaciones que apunten a una misma BD pueden reutilizar el código de los SP. Mayor velocidad de respuesta: Los planes de ejecución de un SP se guardan por más tiempo que los de una consulta hecha desde una aplicación. Seguridad: SQL Server permite asignar permisos por SP. Permite la creación de variables y el uso de tablas temporales. Existen 5 tipos de SP: Procedimientos del sistema, son los que se encuentran almacenados en la base de datos master y algunas en las bases de datos de usuario, brindan información acerca de los datos y características del servidor. En el nombre usan como prefijo sp_. Procedimientos locales, son los procedimientos almacenados en una base de datos. • Procedimientos temporales, son procedimientos locales y sus nombres empiezan con los prefijos # o ##, dependiendo si se desea que sea un procedimiento global a todas las conexiones o local a la conexión que lo define. Procedimientos remotos, son procedimientos almacenados en servidores distribuidos. Procedimientos extendidos, son aquellos que nos permiten aprovechar las funcionalidades de otras librerías externas a SQL Server. Estos procedimientos usan el prefijo xp_ y se encuentran en la base de datos master. Funciones SQL: funciones son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción como un valor. COUNT(*) Nº de filas que componen el grupo. COUNT(campo) Nº de filas con valor asignado al campo (nulos no cuentan). SUM(exp) Suma de valores obtenidos con la expresión en cada fila. AVG(exp) Media. MAX(exp) Máximo. MIN(exp) Mínimo. STDEV(exp) Desviación típica. VAR(exp) Varianza. DAY(fecha) Devuelve el día de mes de fecha. MONTH (fecha) Devuelve el mes de fecha. YEAR (fecha) Devuelve el año de fecha. DATEPART(dw,fecha)
Funciones: propietario: cuenta de usuario que crea la función, nombre: es el nombre de la función que se va a crear. parámetro: parámetros de entrada de la función
tipo_dato: tipo de dato asociado a cada parámetro, valor_por_defecto: valor asignado por defecto al parámetro, tipo_dato_valor_retorno: tipo de dato asociado al valor de retorno. valor_retorno: valor de retorno de la función Tipos de funciones: Escalares: Aceptan uno o más parámetros Devuelven un único valor No es posible cambiar el estado de un objeto de la base de datos (no se puede insertar, actualizar ni eliminar datos en las tablas). Se pueden utilizar variables de tabla. Funciones que devuelven un valor de tabla. Mismas reglas que las funciones escalares Pueden devolver una tabla Pueden utilizarse en el FROM de una cláusula SELECT y unirse a otras tablas o vistas func. det y no det. Deterministas: Devuelven siempre el mismo valor para el mismo conjunto de valores de entrada Es posible construir un índice sobre los resultados que devuelve. No deterministas: El resultado que devuelven puede ser diferente cada vez que son llamadas Ejemplo: Getdate() (devuelve fecha y hora del sistema). SQL
-select idSancion,idEmpleado,idTipoIncidente,idTipoCastigo,dtSancion,
CASE cdEstadoSancion
WHEN 'C' THEN 'Cumplida'
WHEN 'I' THEN 'Incumplida'
ELSE 'No informado'
END estadoSancion,vlMulta
from tbSancion
-select COUNT (*) from tbSancion
where dtSancion between '2009-08-10 00:00:00.000' and '2009-08-24 00:00:00.000'
-select SUM (vlmulta) from tbSancion
-Traer la cantidad de Sanciones por agrupadas por empleado (informar solo id de empleado)
select tbEmpleado.idEmpleado,COUNT(*) as cantsanciones from tbEmpleado inner join tbSancion
on tbEmpleado.idEmpleado=tbSancion.idEmpleado
group by tbEmpleado.idEmpleado
order by tbEmpleado.idEmpleado
Traer la suma pagada en concepto de multas agrupada por cada empleado (informar solo el id de empleado)
select tbEmpleado.idEmpleado,SUM (tbSancion.vlMulta) as Multa from tbEmpleado inner join tbSancion
on tbEmpleado.idEmpleado=tbSancion.idEmpleado
group by tbEmpleado.idEmpleado
order by tbEmpleado.idEmpleado
Informar cuáles son los empleados que tuvieron más de una sanción (informar solo id de empleado).
select tbEmpleado.idEmpleado from tbEmpleado inner join tbSancion
on tbEmpleado.idEmpleado=tbSancion.idEmpleado
group by tbEmpleado.idEmpleado
having COUNT(*) > 1
order by tbEmpleado.idEmpleado
Traer todas las Sanciones para el empleado con idEmpleado=1. se debe listar por sanción
-- a) Nombre del empleado
-- b) Apellido del empleado
-- C) Provincia del empleado
-- d) Descripción de la sanción
-- e) Descripción del castigo
-- f) Fecha de sanción
-- g) Estado de la sanción (Informar palabras completas como se expone en punto dos)
-- h) Multa de la sanción
select tbEmpleado.dsNombre, tbEmpleado.dsApellido,tbProvincia.dsNombre,tbSancion.idTipoIncidente,tbSancion.idTipoCastigo,
CASE tbSancion.cdEstadoSancion
WHEN 'C' THEN 'Cumplida'
WHEN 'I' THEN 'Incumplida'
ELSE 'No informado'
END as EstadoDeSancion ,tbSancion.vlMulta
from tbEmpleado
inner join tbSancion
on tbEmpleado.idEmpleado=tbSancion.idEmpleado
inner join tbProvincia
on tbEmpleado.idProvincia=tbProvincia.idProvincia
where tbEmpleado.idEmpleado = 1
Traer la suma de las multas que abonaron los empleados y su nombre y apellido, Agrupado por nombre y apellido de empleado.
select tbEmpleado.dsNombre,tbEmpleado.dsApellido,SUM(tbSancion.vlMulta) from tbSancion inner join tbEmpleado
on tbSancion.idEmpleado=tbEmpleado.idEmpleado
group by tbEmpleado.dsNombre,tbEmpleado.dsApellido
Informar las fechas en las que se realizaron multas (no mostrar fechas repetidas)
select distinct dtSancion from tbSancion
order by dtSancion desc
Informar la mayor multa pagada por cada empleado (mostrar nombre y apellido)
select tbEmpleado.dsNombre,tbEmpleado.dsApellido,MAX(tbSancion.vlMulta) from tbSancion inner join tbEmpleado
on tbSancion.idEmpleado=tbEmpleado.idEmpleado
group by tbEmpleado.dsNombre,tbEmpleado.dsApellido
Informar el nombre y el apellido de los empleados que fueron sancionados más de una vez.
select tbEmpleado.dsNombre,tbEmpleado.dsApellido from tbSancion inner join tbEmpleado
on tbSancion.idEmpleado=tbEmpleado.idEmpleado
group by tbEmpleado.dsNombre,tbEmpleado.dsApellido
having COUNT(tbSancion.vlMulta) > 1
Funcion que devuelve una tabla:
CREATE FUNCTION PedidosPorProveedor (@codigo char(4))
RETURNS TABLE
AS
RETURN (SELECT count(s.idSancion)as sancion, e.dsNombre
FROM tbEmpleado e, tbSancion s
WHERE e.idEmpleado=@codigo and
e.idEmpleado = s.idEmpleado
GROUP BY e.dsNombre)
GO
-- Ejecución
SELECT * from dbo.PedidosPorProveedor(1)
funcion que devuelve un campo
CREATE FUNCTION Calcular_Pedido (@codigo int)
RETURNS decimal (10,2)
AS
BEGIN
DECLARE @precio money
DECLARE @iva float
SELECT @precio= sum(totallin) from lineas WHERE numped=@codigo
SELECT @iva=ivaped from pedidos WHERE numped=@codigo
SET @precio= (@precio* (@iva/100))+@precio
RETURN @precio
END
GO
-- Ejecución
SELECT dbo. Calcular_Pedido (1)
Funcion inserta y retorna una tabla
CREATE FUNCTION PendientePago (@fecha datetime)
RETURNS @Pagos TABLE (numped int primary key,
cantidad float NOT NULL,
fechaped datetime)
AS BEGIN
INSERT @Pagos
SELECT numped, dbo.calcular_pedido(numped), fechaped
FROM pedidos
WHERE fecpago is null or fecpago>=@fecha
RETURN
END
GO
-- Ejecución
SELECT dbo.PendientePago(getdate())
funcion de tipo escalar
CREATE FUNCTION dbo.fncCalculaEdad_Parametro (@pNombreCompleto Varchar(120),
@pFechaNacimiento Datetime,
@PFechaActual Datetime)
RETURNS Varchar(240) AS
BEGIN
Declare @NombreEdad varchar(240)
Set @NombreEdad = @pnombreCompleto + ' tiene la edad de '
+ Cast(DATEDIFF(YEAR,@pfechanacimiento, @pfechaactual) as
Varchar) + ' años '
return (@NombreEdad)
END
ejecucion:
Select dbo.fncCalculaEdad_Parametro('Glenda Barrios Aguirre',‘06/24/1973', getDATE())
Aplicar un determinado % (recibido como parametro) de descuento a los
productos de un fabricante.
create procedure AplicarDescuento
(
@fabricante int,
@descuento float
)
as
update articulos set precio=precio - (precio*descuento/100)
where fabricante=@fabricante
go
Obtener los N productos de menor precio. (N parametro numerico entero)
incluyendo el nombre del fabricante.
create procedure ProdcutosMenorPrecio
(
@ncantidad int
)
as
select top @ncantidad f.nombre, a.precio
from articulos a
inner join fabricantes f
on a.fabricante=f.codigo
order by a.precio asc
modificar los atributos de un fabricante
create procedure ModificarFabricante
(
@ codigo int,
@ nombre nvarchar (200)
)
as
update fabricantes set nombre=@nombre
where codigo=@codigo