Professional Documents
Culture Documents
Docente:
ING. GERMN NIO
Docente Ingeniera De Bases De Datos
TABLA DE CONTENIDO
Introduccin a los Procedimientos Almacenados ........................................................................................... 3
Procedimientos almacenados extendidos .......................................................................................................... 3
Registro y uso de procedimientos .net con clr en sql server ................................................................. 3
Ejemplos ........................................................................................................................................................................... 5
Ejemplo #1 ............................................................................................................................................................. 6
Ejemplo #2 ............................................................................................................................................................. 8
Ejemplo #3 .......................................................................................................................................................... 10
Conclusiones ................................................................................................................................................................ 12
Referencias ................................................................................................................................................................... 12
Para implementar los procedimientos almacenados se debe Agregar y Registrar la DLL, para
esto existen 2 Formas:
TRANSACT-SQL
Para Crear el Ensamblado en SQL Server se utilizan las siguientes Sentencias:
CREATE ASSEMBLY [Nombre_SqlServerProject]
AUTHORIZATION [dbo]
FROM 'Ruta\fichero.DLL'
WITH PERMISSION_SET = SAFE
EJEMPLOS
Para el desarrollo de los ejemplos vamos a utilizar C# y la siguiente Base de Datos
create database Ejemplos
go
use Ejemplos
go
Create table Empleados
(
Identificacion Integer Not null,
Nombre Varchar(30) Not Null,
Apellido Varchar(30) Not null,
Primary Key (Identificacion)
)
go
Create Table Sueldos_Empleados
(
Identificacion Integer Not Null,
Sueldo_Base Integer Not Null
Foreign key (Identificacion) References Empleados(Identificacion)
)
go
delete from Empleados
Insert Into Empleados values(1024493356,'Camilo','Prieto')
Insert Into Empleados values(1024493222,'Alberto','Rodriguez')
go
delete from Sueldos_Empleados
Insert Into Sueldos_Empleados values(1024493356,1000000)
Insert Into Sueldos_Empleados values(1024493222,2000000)
EJEMPLO #1
En este ejemplo se realiza una consulta a los Objetos de la Base de Datos , donde se pasa como
parmetro el Tipo de objetos que se quiere mostrar al usuario
CODIGO ENSAMBLADO
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Data;
System.Data.SqlClient;
System.Data.SqlTypes;
Microsoft.SqlServer.Server;
while (Lector.Read())
{
Resultado.SetString(0, Lector.GetString(0));
SqlContext.Pipe.SendResultsRow(Resultado);
}
SqlContext.Pipe.SendResultsEnd();
conexion.Close();
Lector.Close();
CREAR ENSAMBLADO
Create assembly CalcularRegistros
FROM 'C:\Users\usuario\Copy\Sistemas
Operativos\Calcular_Registros\Calcular_Registros\bin\Debug\Calcular_Registros.dll'
WITH PERMISSION_SET=SAFE
GO
REGISTRAR PROCEDMIENTO
Create Procedure Registros
@Tipo nvarchar (3)
WITH EXECUTE AS CALLER
AS EXTERNAL name CalcularRegistros.Calcular.Calcular_Registros
GO
EJECUCIN PROCEDIMIENTO
exec Registros 'U'
EJEMPLO #2
En este Ejemplo se trabajara con la Base de datos Ejemplos, donde se toma los datos de la
Tabla Sueldo_Empleados y se realizara una operacin matemtica para calcular el Sueldo a
pagar por cada Empleado segn el Sueldo Base, el porcentaje de subsidio y el porcentaje de
Descuento donde estos 2 ultimo los recibe como parametros.
CODIGO ENSAMBLADO
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Data;
System.Data.SqlTypes;
System.Data.SqlClient;
Microsoft.SqlServer.Server;
conexion.Close();
Total_Sueldo.Close();
CREAR ENSAMBLADO
CREATE ASSEMBLY CalcularSueldo
FROM 'C:\Users\usuario\Copy\Sistemas
Operativos\CalcularSueldo\CalcularSueldo\bin\Debug\CalcularSueldo.dll'
WITH PERMISSION_SET = SAFE
GO
REGISTRAR PROCEDMIENTO
Create Procedure Calcular
@Subsidio integer,
@Porcentaje_Descuento integer
with execute as caller
as external name CalcularSueldo.CalcularSueldo.Calcular_Sueldo
GO
EJECUCIN PROCEDIMIENTO
exec calcular 100,2
EJEMPLO #3
En este Ejemplo se trabajara con la Base de datos Ejemplos, donde se Insertara Registros a la
Tabla Empleados desde el Procedimiento Almacenado, recibiendo como parmetros los datos
del Nuevo Registro
CODIGO ENSAMBLADO
using
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Microsoft.SqlServer.Server;
System.Data.SqlClient;
System.Data.SqlTypes;
System.Data;
System.IO;
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Inserta(int Cedula, string Nombre, string Apellido)
{
SqlConnection conexion = new SqlConnection("context connection=true");
SqlCommand comando = conexion.CreateCommand();
comando.CommandText = "Insert Into Empleados Values
(@Identificacion,@Nombre,@Apellido)";
conexion.Close();
}
}
CREAR ENSAMBLADO
CREATE ASSEMBLY Insertar
FROM 'C:\Users\usuario\Copy\Sistemas
Operativos\Insertar_Datos\Insertar_Datos\bin\Debug\Insertar_Datos.dll'
WITH PERMISSION_SET=SAFE
GO
REGISTRAR PROCEDMIENTO
CREATE PROCEDURE Insertar_Datos
@Cedula int,
@Nombre nvarchar(50),
@Apellido nvarchar(50)
with execute as caller
as external name Insertar.Insertar_Datos.Inserta
GO
EJECUCIN PROCEDIMIENTO
Exec Insertar_Datos 1024493360,'Camilo','Prueba'
CONCLUSIONES
REFERENCIAS
http://msdn.microsoft.com/es-es/library/ms345106.aspx [1]
http://msdn.microsoft.com/es-es/library/ms131094.aspx [2]
ftp://ftp.heanet.ie/mirrors/sourceforge/t/te/technicaldocs/PDF/CLR.pdf [3]
http://msdn.microsoft.com/es-es/library/ms131092.aspx [4]