codigo sql para reiniciar clave primaria autonumerica
delete GuiaCanje
DBCC CHECKIDENT('Nombre_Tabla', RESEED, 0)
go
martes, 2 de marzo de 2010
lunes, 1 de marzo de 2010
Procedimientos almacenados en Transact SQL
Un procedimiento es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones especificas.
Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.
En Transact SQL los procedimientos almacenados pueden devolver valores (numerico entero) o conjuntos de resultados.
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
CREATE PROCEDURE <nombre_procedure> [@param1 <tipo>, ...] AS -- Sentencias del procedure |
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.
ALTER PROCEDURE <nombre_procedure> [@param1 <tipo>, ...] AS -- Sentencias del procedure |
El siguiente ejemplo muestra un procedimiento almacenado, denominado spu_addCliente que inserta un registro en la tabla "CLIENTES".
CREATE PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetime ASINSERT INTO CLIENTES (nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES (@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento) |
Para la ejecutar un procedimiento almacenado debemos utilizar la sentencia EXEC. Cuando la ejecución del procedimiento almacenado es la primera instrucción del lote, podemos omitir el uso de EXEC.
El siguiente ejemplo muestra la ejecución del procedimiento almacenado anterior.
DECLARE @fecha_nacimiento datetime set @fecha_nacimiento = convert(datetime, '13/05/1975', 103) EXEC spu_addCliente 'Pedro', 'Herrarte', 'Sanchez', '00000002323', @fecha_nacimiento |
Siempre es deseable que las instrucciones del procedure esten dentro de un bloque TRY CATCH y controlados por una transacción.
ALTER PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetime AS BEGIN TRYBEGIN TRAN INSERT INTO CLIENTES (nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES (@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento) COMMITEND TRY BEGIN CATCHROLLBACK PRINT ERROR_MESSAGE()END CATCH |
Si queremos que los parámetros de un procedimiento almacenado sean de entrada-salida debemos especificarlo a través de la palabra clave OUTPUT, tanto en la definición del procedure como en la ejecución.
El siguiente ejemplo muestra la definición de un procedure con parámetros de salida.
CREATE PROCEDURE spu_ObtenerSaldoCuenta @numCuenta varchar(20), @saldo decimal(10,2) output AS BEGINSELECT @saldo = SALDO FROM CUENTAS WHERE NUMCUENTA = @numCuentaEND |
Y para ejecutar este procedure:
DECLARE @saldo decimal(10,2) EXEC spu_ObtenerSaldoCuenta '200700000001', @saldo output PRINT @saldo |
Un procedimiento almacenado puede devolver valores numericos enteros a través de la instrucción RETURN. Normalmente debemos utilizar los valores de retorno para determinar si la ejecución del procedimiento ha sido correcta o no. Si queremos obtener valores se recomienda utilizar parámetros de salida o funciones escalares (se verán mas adelante en este tutorial).
El siguiente ejemplo muestra un procedimiento almacenado que devuelve valores.
CREATE PROCEDURE spu_EstaEnNumerosRojos @numCuenta varchar(20) AS BEGINIF (SELECT SALDO FROM CUENTAS WHERE NUMCUENTA = @numCuenta) < 0 BEGIN RETURN 1 END ELSE RETURN 0END |
El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto.
DECLARE @rv int EXEC @rv = spu_EstaEnNumerosRojos '200700000001' PRINT @rv |
Otra caracteristica muy interesante de los procedimientos almacenados en Transact SQL es que pueden devolver uno o varios conjuntos de resultados.
El siguiente ejemplo muestra un procedimiento almacenado que devuelve un conjunto de resultados.
CREATE PROCEDURE spu_MovimientosCuenta @numCuenta varchar(20) AS BEGINSELECT @numCuenta, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO FROM MOVIMIENTOS INNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTA WHERE NUMCUENTA = @numCuenta ORDER BY FXMOVIMIENTO DESCEND |
La ejecución del procedimiento se realiza normalmente.
EXEC spu_MovimientosCuenta '200700000001' |
Procedimientos Almacendados Ejemplos SQL Server 2005
create proc insertar_cliente
@IdCliente char(4),
@Nombres varchar(50),
@Apellidos varchar(50),
@Direccion char(50)
as
insert into Cliente
(IdCliente,Nombres,Apellidos,Direccion)
values(@IdCliente,@Nombres ,@Apellidos,@Direccion)
create proc Cliente_modificar
@IdCliente char(4),
@Nombres varchar(50),
@Apellidos varchar(50),
@Direccion char(50)
as
update Cliente set Nombres=@Nombres,
Apellidos=@Apellidos,
Direccion=@Direccion
where IdCliente=@IdCliente
create procedure Cliente_ordenar
@Nombres varchar(50)
as
select IdCliente,Nombres,Apellidos,Direccion
from Cliente
where Nombres like @Nombres+'%'
exec insertar_cliente '0004', 'ronney', 'sarabia', 'pay pay'
select* from Cliente
Permitir solo números con MaskedTextBox
Otra forma de hacerlo mas sencillo...:
Porejemplo... si tienes que ingresar un Teléfono, y que el Txtbox, ocombobox, acepte solo 8 digitos y solo números... Colocas unMaskedTextBox
Luego enla propiedad Mask, buscas el formato que le quieras dar...
Escoges la que mas se acomode a tus necesidades y listo...
Permitir solo números en el textbox
En esta ocación tan solo queria escribir algo y se me ocurrió la clasica PERMITIR SOLO NÚMEROS O TEXTOS EN UN TEXTBOX o COMBOBOX, bueno aquí se las dejo.
Solo números:
en el evento KeyDown del TextBox o ComboBox agregan
Código:
If Not ((e.KeyValue >= 48 And e.KeyValue <= 57) OrElse (e.KeyValue >= 96 And e.KeyValue <= 105) OrElse (e.KeyValue >= 37 And e.KeyValue <= 40) OrElse (e.KeyValue = 8 OrElse e.KeyValue = 46)) OrElse (e.Shift = TrueOr e.Alt = True) Then e.Handled = True e.SuppressKeyPress = True EndIf
El valor 8 = Borrar
El valor 46 = Suprimir
los valores entre [48 y 57] y [96 y 105] son los correspondientes a las teclas del 0 al 9 del teclado alfanumérico y numérico respectivamente.
los valores entre [37 y 40]son los correspondientes a las teclas del direccionales arriba, abajo para poder desplazarnos dentro del texto.
tambien se determina si se ha oprimido la tecla Shift o la tecla Alt esto para evitar que se impriman los caracteres tales como |, !, @, , #, ·, $, ~, %, , &, ¬, /, (, ), = y otros dependiendo de la configuración y el idioma del teclado.
Para permitir la entrada de texto exclusivamente solo debemos reemplazar los valores numéricos por los corresponientes a las teclas alfanuméricas.
Esto >> ((e.KeyValue >= 48 And e.KeyValue <= 57)
OrElse (e.KeyValue
>= 96 And e.KeyValue
<= 105)
Por esto >> ((e.KeyValue
>= 65 And e.KeyValue
<= 90)
Además ya no es nescesaria la comprobación del Tab y del Shift.
Código:
If Not((e.KeyValue >= 65 And e.KeyValue <= 90)OrElse (e.KeyValue >= 37 And e.KeyValue <= 40) OrElse (e.KeyValue = 192) OrElse (e.KeyValue = 8 OrElse e.KeyValue = 46)) Then e.Handled = True e.SuppressKeyPress = True EndIf
Suscribirse a:
Entradas (Atom)