SQL - procedures

 
Vista:

procedures

Publicado por jo (2 intervenciones) el 22/04/2005 15:57:55
CREATE PROCEDURE Alta_Cliente
@Nombre VARCHAR(20),@apellidos VARCHAR(30),@DNI DNI,@Direccion VARCHAR(20),@Codip cp,@Telefon tf
AS
BEGIN TRANSACTION
IF EXISTS (SELECT DNI
FROM Clients
WHERE DNI LIKE @DNI)
BEGIN
PRINT 'Ya existe el cliente'
ROLLBACK
END
ELSE
BEGIN
INSERT INTO Cliente VALUES(@nombre,@apellidos,@DNI,@Direccion,@Codip,@Telefon)
IF @@ERROR > 0
BEGIN
--ke podria poner aki??
ROLLBACK TRANSACTION
END
IF @@ROWCOUNT <>0
BEGIN
COMMIT TRANSACTION
END
END


DECLARE @Nombre VARCHAR(20),@apellidos VARCHAR(20)@DNI DNI,@Direccion VARCHAR(20),@Codip cp,@Telefon tf
SET @nomBRE='xavi
set @Apellidos='pep''
SET @DNI='43645454-a'
SET @Direccio='Music'
SET @Codip='25003'
SET @Telefon='933232323'
EXECUTE Alta_Client @nom,@apelidos,@DNI,@Direccio,@Codip,@Telefon

Esto funciona correctamente , para evitar el problema de que intenten introducir un mismo dni lo controlo u me lanca el msg de que ya existe el cliente.Bien mi pregunta es la siguiente como capturar los posibles fallos , o sea como podria por ejemple si el usuario intenta executar el procedure sin pasarle por ejemplo el parametro apellidos.
No me salte con ke necesito pasarle el parametro apellidos ,sino ke saliera un mensaje prefdefinido por mi , esto se puede.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:procedures

Publicado por Isaías Islas (5072 intervenciones) el 22/04/2005 18:30:49
Mis comentarios

Un BEGIN TRAN, debe estar EXACTAMENTE antes de la INSERCCION, solo debe manejarse TRANSACCIONES cuando se implican mas de UNA tabla en las actualizaciones.

Para validar el contenido de una variable

IF @MyVar = '' or @MyVar IS NULL
BEGIN
SELECT 'Debe proporcionar un dato valida para MyVar'
RETURN(0)
END

* Notar que no hay ROLLBACK TRAN, ya que NO SE HA ABIERTO una transaccion.

Espero haber ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:procedures

Publicado por JO (2 intervenciones) el 22/04/2005 21:31:57
HEM Isa a ver si te he pillado

Me dices ke no utiliza transaciones para hjacer lo ke deseo ??tan mal esta hacerlo asi.
Y despues el codigo ke mas estrito
IF @MyVar = '' or @MyVar IS NULL
Mes dices ke debo escribir esto para cada variable mia verdad

IF @MyVar = '' or @MyVar IS NULL or @myvar2='' or @myvalisnull ....
seria asi verdad??

y la pregunta tonta XDD
Si mi tabla ya tiene pejemplo la restricion de que no permita valores nullos

ej:
nombre varchr(20) NOT NULL,

Debo poner lode @myvar is NULL o ya saltara algun mensajito de sql diciendom ke no se permiten valores nulos .pq me gustaria hacerlo komo dice tu no ke me salte el mensajito.

gracias eres de gran ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:procedures

Publicado por Isaías Islas (5072 intervenciones) el 22/04/2005 22:38:37
Transacciones.- La instruccion BEGIN TRAN, debe estar EXACTAMENTE antes de iniciar con la ACTUALIZACION de tablas, tu la estas poniendo al principio, si vas a validar variables y algunas otras cuestiones, estas validaciones deben estar fuera de la TRANSACCION.

-- Incorrecto
CREATE PROCEDURE pr_Myprocedure
@MyVar VARCHAR(10)
AS
BEGIN TRAN myTransaccion
SET NOCOUNT ON
IF @MyVar is null or @MyVar = ''
BEGIN
SELECT 'ERROR DE VARIABLE
RETURN (0)
END
INSERT INTO MYTABLA......................

-- CORRECTO
CREATE PROCEDURE pr_Myprocedure
@MyVar VARCHAR(10)
AS
SET NOCOUNT ON
IF @MyVar is null or @MyVar = ''
BEGIN
SELECT 'ERROR DE VARIABLE
RETURN (0)
END
BEGIN TRAN myTransaccion
INSERT INTO MYTABLA......................

En cuanto a las caracteristicas de la columan (que no acepte null), en caso de INSERTAR una columna en NULL, te enviara el mensaje DEFAULT que maneja SQL Server por RAISEERROR.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar