Вы находитесь на странице: 1из 14

Diseo e implementacin de base

de datos
Es un grupo de instrucciones T-SQL
compiladas como una sola unidad.
Pueden regresar datos en 3 formas distintas:
Parmetros de salida.
Pueden regresar valores tales como enteros y caracteres,
as como conjuntos de resultados en una variable de salida.
Valores de retorno.
Regresa un solo valor de cualquier tipo.
Conjunto de resultados.
Por cada instruccin SELECT incluida en el procedimiento.

Estos procedimientos ayudan a alcanzar una
implementacin consistente de la lgica de
una aplicacin.
La codificacin de la lgica de negocio en un
procedimiento almacenado ofrece un nico punto de
control para garantizar que las reglas de
negocio son correctamente aplicadas.
Un procedimiento almacenado tambin
ofrece beneficios en el desempeo.
El cdigo de un procedimiento almacenado est
compilado por el servidor, por lo que su ejecucin es
mas rpida.
Las aplicaciones no transmiten toda una serie de
instrucciones de T-SQL, sino una simple llamada al
procedimiento.
Ejemplos
CREATE PROCEDURE spMostrarPorNombre
@nombre varchar(20)
AS
BEGIN
SELECT *
FROM fisica
WHERE nombre=@nombre
END

-----------------------------------

EXEC spMostrarPorNombre
CREATE PROCEDURE spTotalPersonas
AS
BEGIN
DECLARE @total int
SELECT @total = count(*)
FROM persona
RETURN @total
END

-----------------------------------

DECLARE @x int
EXEC @x=spTotalPersonas
SELECT @x
Ejemplos
CREATE PROCEDURE spTotalPersonas2
@total int OUTPUT
AS
BEGIN
SELECT @total = count(*)
FROM persona
END

----------------------------------------

DECLARE @x int
EXEC spTotalPersonasout @x OUTPUT
SELECT @x
Ya que un procedimiento almacenado
puede ser usado para manejar la lgica de
negocio de una aplicacin, se necesitan
estructuras de control de flujo tal como en
los lenguajes de programacin.
IFELSE
WHILE
Impone condiciones en la ejecucin de
una instruccin T-SQL.
Se evala una expresin booleana y se ejecuta
un conjunto de instrucciones en caso de ser
verdadera
La palabra clave opcional ELSE es una alternativa
que se ejecuta cuando la expresin booleada
resulta falsa o nula.
Ejemplo.
ALTER PROCEDURE spMostrarPorNombre
@nombre varchar(20)
AS
BEGIN
IF @nombre is null or @nombre=''
RETURN
ELSE
SELECT *
FROM fisica
WHERE nombre=@nombre

END
Ejemplo.

ALTER PROCEDURE spAgregarMunicipio
@munId int, @nom varchar(50),
@area float, @lat float, @lon float
AS
BEGIN
IF exists(select * from municipio where nombre=@nom)
BEGIN
PRINT Ya est ese municipio
RETURN
END
ELSE
INSERT municipio
VALUES(@munId,@nom,@area,@lat,@lon)
END
Establece una condicin para la ejecucin
repetida de una instruccin o bloque de
instrucciones SQL.
Las instrucciones se ejecutan repetidamente
siempre que la condicin especificada sea
verdadera.
Se puede controlar la ejecucin de
instrucciones en el bucle WHILE con las
palabras clave BREAK y CONTINUE.
Ejemplo
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300 BEGIN
UPDATE Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice)
FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
Una transaccin es una unidad nica de
trabajo.
Si una transaccin tiene xito, todas las
modificaciones de los datos realizadas durante la
transaccin se confirman y se convierten en una
parte permanente de la base de datos.
Si una transaccin encuentra errores y debe
cancelarse o revertirse, se borran todas las
modificaciones de los datos.
SQL Server funciona en 3 modos de
transaccin.
Transacciones de confirmacin automtica
Cada instruccin individual es una transaccin.
Transacciones explcitas
Cada transaccin se inicia explcitamente con la instruccin
BEGIN TRANSACTION y se termina explcitamente con una
instruccin COMMIT o ROLLBACK.
Transacciones implcitas
Se inicia implcitamente una nueva transaccin cuando se ha
completado la anterior, pero cada transaccin se completa
explcitamente con una instruccin COMMIT o ROLLBACK.
Ejemplo
BEGIN TRAN UpdateTransaction
BEGIN
Update #cashBook1 Set value=10.3254 where id='12'
set @upd1 = @@rowcount

Update #cashBook2 Set value=86.2545 where id='25'
set @upd2 = @@rowcount
END
IF @@ERROR <> 0 or @upd1 = 0 OR @UPD2 = 0
BEGIN
print Se hace rollback'
ROLLBACK
END
ELSE
BEGIN
print Se hace commit'
COMMIT

Вам также может понравиться