REGLAS DE NORMALICACIÓN.
Explicación del modelo Entidad-Relacion, modelo relacional y las reglas de normalización
Información sobre el proceso de instalación y configuración del SQL Server, sobre un Servidor de Windows 2003 Server, tenga en cuenta que sobre las versiones de Servidor de sistema operativo se debe instalar una versión Enterprice, mientras sobre Windows Xp o Windows 7 se debe instalar una versión Developer.
SQL TRANSACT: Comprobación de la Instalación de SQL, Introducción a la Instrucción Select
Conocer las herramientas que componen el Microsoft SQL Server 2008, los servicios que debe inicializarse, las bases de datos del sistema entre otros temas.
SQL TRANSACT: Uso de la instruccion SELECT
Uso de la instrucción SELECT como petición de datos, tambien usaremos la instrucción WHERE para filtrar los datos devueltos, usaremos la instruccion like y between.
--USO DE LA INSTRUCCION SELECT
USE NORTHWIND
GO
SELECT DISTINCT COUNTRY FROM CUSTOMERS --DISTINCT MUESTRA SOLO VALORES UNICOS
--CLAUSULA DE RESTRICCION WHERE
SELECT * FROM CUSTOMERS
WHERE COUNTRY='GERMANY'
SELECT * FROM ORDERS
WHERE --comparadores > < >= <= BETWEEN Ó LIKE
ORDERDATE BETWEEN '1998-01-01' AND '1998-31-12' AND EMPLOYEEID=7
SELECT * FROM CUSTOMERS
WHERE COMPANYNAME LIKE '_e%' -- el simbolo _ sustituye una letra, % varias letras
select * from customers
where companyname like '[AD]%' --todos los que comienzan con A ó con D
select * from customers
where companyname like '[A-D]%' --todos los que comienzan con A, B, C, D
select * from customers
where companyname like '[^A]%' --todos los que no comiencen con la letra A, [^]no contiene
SELECT * FROM CUSTOMERS
WHERE COUNTRY NOT IN ( 'BRAZIL','GERMANY','SPAIN')--LOS QUE ESTEN CONTENIDOS
SELECT * FROM CUSTOMERS
WHERE COUNTRY NOT LIKE 'B%'--TODOS LOS QUE NO COMIENCEN CON B, CUIDADO CON LOS ***NOT***
SELECT CUSTOMERID, COMPANYNAME, FAX FROM CUSTOMERS
WHERE FAX IS NOT NULL -- DEVULVAME TODOS LOS REGISTROS DE FAX LLENOS
SELECT CUSTOMERID, COMPANYNAME, FAX FROM CUSTOMERS
WHERE FAX IS NULL -- DEVULVAME TODOS LOS REGISTROS DE FAX VACIOS
SELECT COUNT(FAX) FROM CUSTOMERS --CUENTA SOLO LOS REGISTROS LLENOS, LOS VALORES VACIOS NO
------EJEMPLO-----------------------------
USE PUBS
SELECT TITLE_ID AS CODIGO,TITLE AS LIBRO,TYPE AS TIPO FROM TITLES -- AS PARA RENOMBRAR
WHERE TYPE='psychology' -- UNA COLUMNA
ORDER BY LIBRO DESC
USE NORTHWIND
SELECT COUNTRY,CUSTOMERID,CONTACTNAME, CONTACTTITLE FROM CUSTOMERS
ORDER BY COUNTRY ASC , CUSTOMERID DESC -- ORDER BY PARA ORDENAR LA VISTA
SELECT 'NOMBRE COMPAÑIA: '+ COMPANYNAME + ', NOMBRE DEL CONTACTO: '
+ CONTACTNAME AS INFORMACION FROM CUSTOMERS -- MODIFICANDO EL FORMATO AGREGANDO TEXTOS CONCATENADOS
-----------------------
SELECT CUSTOMERS.CUSTOMERID, CONTACTNAME, ORDERID, ORDERDATE
FROM CUSTOMERS INNER JOIN ORDERS
ON CUSTOMERS.CUSTOMERID = ORDERS.CUSTOMERID
ORDER BY ORDERID
------
SELECT
CUSTOMERID
--,COMPANYNAME
,CONTACTNAME
FROM CUSTOMERS
|
SQL TRANSACT: Consultas Multitablas
La consulta de datos entre varias tablas obedece a una teoria de conjuntos, aqui se explica las instrucciones Join, Left Outer Join y Right Outer Join, Cross Join, para devolver datos de varias tablas.
SQL TRANSACT: Insert, Update, Delete
Como Agregar con la instrucción INSERT, Modificar con la instrucción UPDATE ó Eliminar con la instruccion DELETE los datos de una Tabla de una Base de Datos en SQL Sever 2008
SQL TRANSACT: Uso XML en SQL Server 2008
Instrucciones para realizar consultas y devolverlas en formato XML, o extraer un valor de un XML
---xml
---For XML Raw , Auto, Explicit, Path
--consulta de las tablas customers y orders
--1.Ejemplo 1
Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml raw
--2.Ejemplo 2
Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml auto
----------For XML Explicit
--Informacion de customers y orders del customerid='ALFKI'
Select 1 as Tag, null as parent,
customerid as [Cliente!1!customerid], contactname as [Cliente!1],
null as [Orden!2!orderid],
null as [Orden!2]
from customers as C where customerid='ALFKI'
union
Select 2 as Tag, 1 as Parent, C.customerid,
C.contactName, o.orderid, o.shipaddress from
Customers as C inner join orders as o
on C.CustomerID=o.CustomerID
where C.CustomerID='ALFKI'
For xml Explicit
--resultado xml Anterior
<C customerid="ALFKI">Maria Anders
<O orderid="10643">Obere Str. 57</O>
<O orderid="10692">Obere Str. 57</O>
<O orderid="10702">Obere Str. 57</O>
<O orderid="10835">Obere Str. 57</O>
<O orderid="10952">Obere Str. 57</O>
<O orderid="11011">Obere Str. 57</O>
</C>
---uso de for xml path
Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml path ('venta')
-----------uso de xml.query
declare @mydoc xml
set @mydoc='<root>
<productdescription productid="1" productname="rood bike">
<Features>
<warranty>1 año de garantia para partes</warranty>
<maintenance>3 años de mantenimiento</maintenance>
</Features>
</productdescription>
</root>'
Select @mydoc.query
('/root/productdescription/Features/maintenance')
-----------uso de xml.Value
declare @bicicleta varchar(100)
declare @mydoc xml
set @mydoc='<root>
<productdescription productid="1" productname="rood bike">
<Features>
<warranty>1 año de garantia para partes</warranty>
<maintenance>3 años de mantenimiento</maintenance>
</Features>
</productdescription>
</root>'
Set @bicicleta= @mydoc.value(
'(/root/productdescription/@productname)[1]', 'varchar(100)')
Select @bicicleta
|
SQL ADMINISTRACIÓN: Instalación
SLQ ADMINISTRACION: Creación de una Base de Datos
--Creación de una base de Datos
Create Database Ejemplo
on
Primary
( Name=EmploData,
filename='C:\Archivos de programa\Microsoft Sql server\ejemplo.mdf'
size=10MB, --el Mínimo es 512Kb, el predeterminado es 1MB,
maxsize=15MB,
Filegrowth=20% -- default es 10%, minimo es 64KB
)
log on
( Name=EmploData,
filename='C:\Archivos de programa\Microsoft Sql server\ejemplo.ldf'
size=3MB, --el Mínimo es 512Kb, el predeterminado es 1MB,
maxsize=15MB,
Filegrowth=20%
)
Use ventas
go
/* opciones de bd
auto_close, auto_create_statistics, auto_shrink
auto_update_statistics
--cursores--
Cursor_close_on_commit
*/
Alter database ventas
SET Cursor_close_on_commit ON
GO --CIERRA CUALQUIER CURSOR AUTOMATICAMENTE
--PARA REVISAR ESTADO DE LAS OPCIONES
SELECT DATABASEPROPERTYEX('VENTAS','ISAUTOSHRINK')
--CONSULTAR INFORMACION DE GRUPOS
SP_HELPFILEGROUP GRUPOVENTAS
SP_HELPFILE VENTASDATA
USE MASTER
go
SP_HELP VENTAS
--CREACION DE GRUPOS
ALTER DATABASE Northwind
ADD FILEGROUP OrderHistoryGroup
GO
ALTER DATABASE Northwind
ADD FILE
( NAME = 'OrdHistYear1',
FILENAME = 'c:\Archivos de programa\
Microsoft SQL Server\MSSQL\Data\OrdHist1.ndf,
SIZE = 5MB),
TO FILEGROUP OrderHistoryGroup
GO
--modificar el grupo primario
USE master
GO
ALTER DATABASE MyDatabase
MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
--Sintaxis Modificacion de la Base de datos
ALTER DATABASE baseDeDatos
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP
nombreGrupoDeArchivos ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE nombreArchivoLógico [ WITH DELETE ]
| ADD FILEGROUP nombreGrupoDeArchivos
| REMOVE FILEGROUP nombreGrupoDeArchivos
| MODIFY FILE < filespec >
| MODIFY NAME = nuevoNombreBaseDatos
| MODIFY FILEGROUP nombreGrupoDeArchivos
{propiedadGrupoDeArchivos | NAME = nuevoNombreGrupoDeArchivos }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < nombreIntercalación >
}
--modificar un archivo
USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO
USE NORTHWIND
GO
SP_HELPdb northwind
dbcc shrinkdatabase (northwind,10) --10 es el porcentaje de espacio libre que quedara
dbcc shrinkfile(northwind,2) --Reduce a 2MB el archivo de datos
-----Romper el vínculo entre los archivos de la bd
use master
go
sp_detach_db 'northwind','true'
--vincular un archivo de base de datos
exec sp_attach_db 'Northwind'
,'C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\northwnd.mdf'
,'C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\northwnd.ldf'
--------Creacion de Instantaneas------------
CREATE DATABASE AdventureWorks_dbss1800 ON
( NAME = AdventureWorks_Data, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )
AS SNAPSHOT OF AdventureWorks;
GO
|
SLQ ADMINISTRACION: Autenticación y Esquemas
SQL ADMINISTRACIÓN: Creación de Tipos de Dato y Tablas
--Crear Tipo de Dato personalizado
Create Type city from nvarchar(15) not NULL;
--Borrar tipo personalizado
Drop type city
-----Crear una Tabla--------------
USE VENTAS
CREATE TABLE dbo.InformacionCliente
(CodigoCliente int IDENTITY (1, 1) NOT NULL,--No nulos, int numeric o decimal
NombreCliente nvarchar(15) NOT NULL, --IDENTITYCOL
ApellidoCliente nvarcHar(20) NOT NULL,
FechaNacimiento datetime NULL,
SALARIO money,
Picture image NULL,
[igss] AS ([Salario]*0.0483)
)
--ver las dependencias de una tabla
sp_depends
------Borrar una tabla------------
DROP TABLE DBO.INFORMACIONCLIENTE
------Agregar Columnas------------
ALTER TABLE CategoriesNew
ADD Commission money null
-----Borrar Columnas-------------
ALTER TABLE CategoriesNew
DROP COLUMN Commission
Use northwind
Select IDENT_SEED('orders')--identity inicial
Select IDENT_INCR('orders')--identity incremento
---averiguar valores iniciales de identity-------------
USE northwind
SELECT TABLE_NAME, IDENT_SEED(TABLE_NAME) AS IDENT_SEED
FROM INFORMATION_SCHEMA.TABLES
WHERE IDENT_SEED(TABLE_NAME) IS NOT NULL
---@@identity, que determina el valor de la última fila insertada en
---una columna de identidasseld durante una sesión.
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
/*SCOPE_IDENTITY devuelve el último valor de IDENTITY insertado
en una columna de identidad del mismo ámbito.
*/
--USO DE LA INSTRUCCION DBCC CHECKIDENT
--A. Restablecer el valor de identidad actual si es necesario
--En este ejemplo se restablece el valor de identidad actual, si es necesario, de la tabla jobs.
USE pubs
GO
DBCC CHECKIDENT (jobs)
GO
--B. Informar del valor de identidad actual
--En este ejemplo se informa del valor de identidad actual de la tabla jobs, y no se corrige el valor de identidad, si fuera incorrecto.
USE pubs
GO
DBCC CHECKIDENT (jobs, NORESEED)
GO
--C. Establecer el valor de identidad actual en 30
--En este ejemplo se establece el valor de identidad actual de la tabla jobs en 30.
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
--insertar valores ----------------
INSERT informacioncliente (codigocliente,NOMBRECLIENTE,APELLIDOCLIENTE,FECHANACIMIENTO,SALARIO)
VALUES(8,'LUIS','GARCIA','1998-1-1',8000)
--volver el identity valor explicito---------
Set IDENTITY_INSERT informacionCliente On
|
SQL ADMINISTRACIÓN: Como realizar Backups y Restore
SQL ADMINISTRACIÓN: Consultas de Paso a traves en SQL Server 2008
SQL ADMINISTRACIÓN: Como Replicar en SQL Server 2008
SQL ADMINISTRACIÓN: Transaction Log Shipping
Configuración de Trasvase de Registros en SQL Server de Microsoft
SQL PROGRAMACIÓN CON TRANSACT: Creación de Indices
En este video conoceremos la diferencia entre un indice agrupado y un no agrupado, como son construidos en sql server y su funcionamiento.
SQL PROGRAMACIÓN CON TRANSACT: Creación de Tablas e Indices Particionados
En esta leccion se explica como crear tablas e indices particionados, lo que permite repartir los datos de la tabla en diferentes discos, mejorando el tiempo de consulta de los datos al usar varios discos en paralelo.
SQL PROGRMACIÓN CON TRANSACT: Estimación de Planes de Ejecución
Introducción a la estimación de planes de ejecución de consultas en SQL Server 2008
SQL PROGRAMACIÓN CON TRANSACT: Creación de Funciones
Las funciones resultan un hibrido entre vista y procedimiento almacenado, permitiendo enviar parametros a una consulta, en este video se revisa su funcionamiento.
Use northwind
go
--1.Creacion de Funciones Escalares
CREATE FUNCTION Iva (@DATE money)
RETURNS money
AS
BEGIN
Declare @iva money
Set @Iva=@date*.12
Return(@iva)
END
--3.Revisar la funcion debe de escribirse el nombre con dos partes
Select unitprice, dbo.iva(unitprice) as iva from [order details]
--4.borrar la funcion
drop function iva
--5.Otro ejemplo de funcion
CREATE Function Comision (@valor money)
ReturnS money
as
Begin
Declare @Resultado money
if @valor>=15
BEGIN
SET @RESULTADO= @VALOR * 1.10
END
ELSE
BEGIN
SET @RESULTADO=@VALOR
END
RETURN @RESULTADO
END
--ejecutar la funcion
SELECT UNITPRICE, DBO.Comision(UNITPRICE) FROM [ORDER DETAILS]
/* en una funcion no se pueden usar estas funciones no determiniestas
@@ERROR FORMATMESSAGE IDENTITY USER_NAME
@@IDENTITY GETANSINULL NEWID @@ERROR
@@ROWCOUNT GETDATE PERMISSIONS @@IDENTITY
@@TRANCOUNT GetUTCDate SESSION_USER @@ROWCOUNT
APP_NAME HOST_ID STATS_DATE @@TRANCOUNT
CURRENT_TIMESTAMP HOST_NAME SYSTEM_USER
CURRENT_USER IDENT_INCR TEXTPTR
DATENAME IDENT_SEED TEXTVALID
*/
--6.Una función con valores de tabla de varias instrucciones es una combinación de una vista y un procedimiento almacenado.
CREATE FUNCTION LISTAPORPAIS (@PAIS VARCHAR(50))
RETURNS @CLIENTES TABLE
(
CUSTOMERID VARCHAR(10), COMPANYNAME VARCHAR(50),CONTACTNAME VARCHAR(50) ,COUNTRY VARCHAR(50)
)
AS
BEGIN
INSERT @CLIENTES SELECT CUSTOMERID,COMPANYNAME,CONTACTNAME,COUNTRY FROM CUSTOMERS
WHERE COUNTRY=@PAIS
RETURN
END
--7.EJECUCION DE FUNCION
SELECT * FROM LISTAPORPAIS('GERMANY')
--8.Ejemplo de una función con valores de tabla en línea
CREATE FUNCTION DETALLEPEDIDO_FECHA (@INICIO DATETIME, @FIN DATETIME)
RETURNS TABLE
AS
RETURN
(
SELECT O.ORDERID,O.ORDERDATE,P.PRODUCTID, P.PRODUCTNAME,(OD.UNITPRICE * OD.QUANTITY) AS TOTAL
FROM ORDERS AS O INNER JOIN [ORDER DETAILS] AS OD
ON O.ORDERID=OD.ORDERID INNER JOIN PRODUCTS AS P
ON OD.PRODUCTID=P.PRODUCTID
WHERE O.ORDERDATE BETWEEN @INICIO AND @FIN
)
--Ejecutar la funcion
SELECT * FROM DBO.DETALLEPEDIDO_FECHA('1998-01-01','1998-31-12')
|
SQL PROGRAMACIÓN CON TRANSACT: Creación de Procedimientos Almacenados
El procedimiento almacenado es el objeto estrella y mas optimizado del SQL Server, en esta lección se aprenden los aspectos basicos de un procedimiento.
--1. Crea un procedimiento en la base de datos Activa
USE NORTHWIND
GO
CREATE PROC DBO.ORDENESNOENTREGADAS
AS
SELECT * FROM ORDERS WHERE ORDERDATE
BETWEEN '1996-01-01' AND '1996-31-12'
--2.Información de Procedimientos
EXEC SP_HELP ORDENESNOENTREGADAS
EXEC SP_DEPENDS ORDENESNOENTREGADAS
EXEC SP_HELPTEXT ORDENESNOENTREGADAS
EXEC SP_STORED_PROCEDURES
SELECT * FROM SYSOBJECTS
SELECT * FROM SYSCOMMENTS
SELECT * FROM SYSDEPENDS
--3.Ejecucion de un procedimiento
EXEC ORDENESNOENTREGADAS
sp_executesql ORDENESNOENTREGADAS --USAR SP_EXECUTESQL ES MAS OPTIMO PORQUE GENERA PLANES DE EJECUCION DINAMICAMENTE
EXEC ORDENESNOENTREGADAS WITH RECOMPILE --EXIGE QUE SE RECOMPILE UN NUEVO PLAN
--4.Agregar datos con Insert Into partiendo del resultado del procedimiento
CREATE TABLE [PEDIDOS96]
(
[OrderID] [int] NOT NULL ,
[CustomerID] [nchar] (5) ,
[EmployeeID] [int] NULL ,
[OrderDate] [datetime] NULL ,
[RequiredDate] [datetime] NULL ,
[ShippedDate] [datetime] NULL ,
[ShipVia] [int] NULL ,
[Freight] [money] NULL DEFAULT (0),
[ShipName] [nvarchar] (40) NULL ,
[ShipAddress] [nvarchar] (60) NULL ,
[ShipCity] [nvarchar] (15) NULL ,
[ShipRegion] [nvarchar] (15) NULL ,
[ShipPostalCode] [nvarchar] (10) NULL ,
[ShipCountry] [nvarchar] (15) NULL ,
)
ON [PRIMARY]
GO
INSERT INTO PEDIDOS96
EXEC ORDENESNOENTREGADAS
Select into
--5. Modificar el procedimiento almacenado
ALTER PROC DBO.ORDENESNOENTREGADAS
AS
SELECT * FROM ORDERS WHERE ORDERDATE
BETWEEN '1998-01-01' AND '1998-31-12'
--6.Para eliminar el procedimiento almacenado en la base de datos activa
DROP PROC DBO.ORDENESNOENTREGADAS
--7. Parametros de Entrada
CREATE Proc Insercion
@Tabla1 bit,@compañia varchar(50),@contacto varchar(50)
,@titulo varchar(50),@direccion varchar(50)
as
DECLARE @codigo varchar(50)
SET @codigo=substring(convert(varchar(10),rand()),3,5)
if @Tabla1=1
begin
insert suppliers (companyname,contactname,contacttitle,address)
values
(@compañia,@contacto,@titulo,@direccion)
end
else
begin
insert customers (customerid,companyname,contactname,contacttitle,address)
values
(@codigo,@compañia,@contacto,@titulo,@direccion)
end
--8. Ejecucion con Parametros de entrada
exec insercion
@compañia='cardenas inc',@contacto='Luis',@titulo='Ing',@direccion='18calle 1-6 Z.1'
exec Insercion 0,'cardenas inc9','Victor Cardenas','Ing.','30av 23-56 Z.5'
--9.Recompilar un procedimiento Y ESTABLECER ERRORES
ALTER PROC TESTRECOMPILACION
@VALOR INT
WITH RECOMPILE
AS
DECLARE @STRING VARCHAR(200)
SET @STRING='SELECT TOP '+ CONVERT(CHAR(1),@VALOR) + ' * FROM ORDERS ORDER BY ORDERID'
EXECUTE (@STRING)
IF @@ERROR<>0
BEGIN
PRINT 'EQUIVOCACION AL INGRESAR MAS DE UN PARAMETRO EN PARAMETRO DE ENTRADA'
END
--10.RECOMPILAR EL PROCEDIMEINTO
EXEC TESTRECOMPILACION 8 WITH RECOMPILE
--11.PROCEDIMIENTO SP_RECOMPILE
SP_RECOMPILE TESTRECOMPILACION
DBCC FREEPROCCACHE --Borra de la cache todos los planes de ejecucion
--12. Parametros de Salida
create Proc Salida
@pais varchar(50),
@valor1 int OUTPUT
as
Select * from customers where country=@pais
set @valor1=@@rowcount
DECLARE @TEST1 INT
exec salida 'Argentina',@TEST1
SELECT @TEST1
--13. Procedimientos extendidos
Use Master
go
EXEC master.dbo.xp_cmdshell 'dir c:\ '
EXEC master.dbo.sp_helptext xp_cmdshell --buscar el dll que realiza la funcion
--14. Escribir un mensaje de error
EXEC sp_addmessage
@msgnum = 50010,
@severity = 10,
@lang= 'us_english',
@msgtext = 'Solo se permite un digito',
@with_log = 'true'
exec sp_dropmessage 50010,'us_english'
use master
select * from sysmessages
sp_helptext sp_dropmessage
--15. Usar @@Error
ALTER PROC TESTRECOMPILACION
@VALOR INT
WITH RECOMPILE
AS
DECLARE @STRING VARCHAR(200)
SET @STRING='SELECT TOP '+ CONVERT(CHAR(1),@VALOR) + ' * FROM ORDERS ORDER BY ORDERID'
EXECUTE (@STRING)
IF @@ERROR<>0
BEGIN
PRINT 'EQUIVOCACION AL INGRESAR MAS DE UN PARAMETRO EN PARAMETRO DE ENTRADA'
END
--16. usar el error con raiseeror
ALTER PROC TESTRECOMPILACION
@VALOR INT
WITH RECOMPILE
AS
DECLARE @STRING VARCHAR(200)
SET @STRING='SELECT TOP '+ CONVERT(CHAR(1),@VALOR) + ' * FROM ORDERS ORDER BY ORDERID'
EXECUTE (@STRING)
IF @@ERROR<>0
BEGIN
RAISERROR(50010, 16, 1)
END
exec testrecompilacion 88
--17. borrar de caché todos lo planes de ejecucion
DBCC FREEPROCCACHE
---uso del Return
use pubs
go
CREATE PROCEDURE checkstate @param varchar(11)
AS
IF (SELECT state FROM authors WHERE au_id = @param) = 'CA'
RETURN 1
ELSE
RETURN 2
--revision del resultado
declare @rev int
exec @rev=checkstate '238-95-7766'
if @rev=1
begin
print 'bien'
end
else
begin
print 'mal'
end
|
SQL PROGRAMACIÓN CON TRANSACT: Creación de Triggers
Creación de Triggers en SQL 2008, Tipos de Triggers y su funcionamiento
USE NORTHWIND
GO
/*
CREATE TRIGGER [propietario.] nombreDesencadenador
ON [propietario.] nombreTabla
[WITH ENCRYPTION]
{FOR | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
AS
[IF UPDATE (nombreColumna)...]
[{AND | OR} UPDATE (nombreColumna)...]
instruccionesSQL}
Sintaxis
*/
--1.CREACION DE UN TRIGGER SOBRE LA TABLA ORDER DETAILS--
SELECT * FROM [ORDER DETAILS]
SELECT * FROM PRODUCTS
CREATE TRIGGER BUSCARPRECIO --CREA EL TRIGUER
ON [ORDER DETAILS] --ON ESPECIFICA LA TABLA
FOR INSERT --FOR ESFECIFICA EL EVENTO INSERT, UPDATE, DELETE
AS --AS ESPECIFICA EL CUERO
UPDATE [ORDER DETAILS] SET UNITPRICE=
(SELECT P.UNITPRICE FROM PRODUCTS AS P INNER JOIN INSERTED AS I
ON P.PRODUCTID=I.PRODUCTID)
--2.REVISION DEL TRIGGER--
INSERT [ORDER DETAILS](ORDERID,PRODUCTID,QUANTITY,DISCOUNT)
VALUES
(10248,47,6,0)
--3.BORRAR EL TRIGUER
DROP TRIGGER BUSCARPRECIO
--4.CREAR UN TRIGGER CON INSTEAD OF--
CREATE TRIGGER REVISARDETALLE
ON [ORDER DETAILS]
INSTEAD OF INSERT
AS
IF (SELECT ORDERID FROM INSERTED)=10248
BEGIN
RAISERROR('NO ES POSIBLE INGRESAR MAS DATOS A ESE PEDIDO',16,1)
ROLLBACK TRAN
END
ELSE
BEGIN
INSERT [ORDER DETAILS] SELECT ORDERID,PRODUCTID,UNITPRICE,QUANTITY,DISCOUNT FROM INSERTED
END
--5.LOS TRIGGER SE PUEDEN ANIDAR HASTA 32 NIVELES PARA CAMBIAR EL NIVEL DE ANIDAMIENTO--
sp_configure 'nested triggers', 0
--6.PARA ACTIVAR LA RECURSIVADAD DE UN TRIGGER QUE ESTA DE FORMA PREDETERMINADA EN OFF-
ALTER DATABASE NORTHWIND
SET RECURSIVE_TRIGGERS OFF
sp_dboption nombreBaseDatos, 'recursive triggers', True
--7.SI TIENE MAS DE UN TRIGGER EN LA MISMA TABLA PARA INDICAR EL ORDEN DE EJECUCION--
sp_settriggerorder @triggername= 'MyTrigger', @order='first', @stmttype = 'UPDATE'
|
ENVIAR CORREO ELECTRONICO DESDE SQL SERVER
Usando DataBase Mail para enviar correo electrónico desde SQL Server