none
Error en procedimiento almacenado cuando no es ejecutado por un administrador

    Pregunta

  • Hola gente que tal..?estamos comenzando con base de datos y lo hacemos con sql server 2008(developer edition),hemos instalado el windows server 2003 tambien..,ya tenemos 4 equipos en el dominio..,bien,se ha creado un procedimiento almacenado :
    ALTER PROCEDURE [dbo].[msp_ABMREGISTRO] 
    
    	@tipo_registro nvarchar(10) = null, 
    
    	@documento_registro nvarchar(10) = null,
    
    	@dna_registro nvarchar(10)=null,
    
    	@fecha_registro datetime,
    
    	@cliente_registro int = 0
    
    AS
    
    BEGIN TRY
    
    	SET NOCOUNT ON;
    
    		BEGIN
    
    			BEGIN TRAN
    
    			INSERT INTO dbo.REGISTRO
    
    			(TIPO
    
    			,DOCUMENTO
    
    			,DNA
    
    			,FECHA_REGISTO
    
    			,CLIENTE
    
    			,FECHA_ALTA
    
    			,MIUSUARIO
    
    			,MARCA)
    
    			VALUES(@tipo_registro
    
    			,@documento_registro
    
    			,@dna_registro
    
    			,@fecha_registro
    
    			,@cliente_registro
    
    			,GETDATE()
    
    			,USER_NAME()
    
    			,1)
    
    			COMMIT TRAN		
    
    	END
    
    END TRY
    
    BEGIN CATCH
    
    	ROLLBACK TRAN
    
    	RAISERROR ('Se ha producido un error inesperado, proceso incompleto',15,1)
    
    END CATCH
    
    
    
    
    como veran solo guarda registro..,que se ingrease desde un formulario..,cuando un usuario del dominio ingresa y quiere ingresar un dato no lo puede hacer le da el error que esta dentro el RAISERROR,pero cuando uno entra con cuenta administador tranquilamente puede insertar registro en la base de datos..,algun consejo o sugerancia..,muchas gracias..!!
    miércoles, 13 de octubre de 2010 15:12

Respuestas

Todas las respuestas

  • En primer lugar, no hace falta abrir una transacción de forma explícita (BEGIN TRAN ... COMMIT TRAN) cuando la única operación que vas a realizar es un INSERT (o un UPDATE, o un DELETE), ya que (a menos que hayas cambiado esa opción) de forma predeterminada, SQL Server ya lo hace de forma implícita.

    En cuanto al error que te lanza, sería interesante conocer cuál es el mensaje exacto de error según el usuario que ejecuta el procedimiento almacenado. Para ello deberías recoger (al menos) dicho mensaje, tal y como indican en http://technet.microsoft.com/es-es/library/ms190358%28SQL.100%29.aspx

    miércoles, 13 de octubre de 2010 15:22
  • Hola Carlos..,antes que nada muchas gracias por tu tiempo..,he modificado mi procedimiento almacenado de esta forma:
    ALTER PROCEDURE [dbo].[msp_ABMREGISTRO] 
    
    	@tipo_registro nvarchar(10) = null, 
    	@documento_registro nvarchar(10) = null,
    	@dna_registro nvarchar(10)=null,
    	@fecha_registro datetime,
    	@cliente_registro int = 0
    AS
    BEGIN TRY
    	SET NOCOUNT ON;
    		BEGIN
    			INSERT INTO dbo.REGISTRO
    
    			(TIPO
    			,DOCUMENTO
    			,DNA
    			,FECHA_REGISTO
    			,CLIENTE
    			,FECHA_ALTA
    			,MIUSUARIO
    			,MARCA)
    			VALUES(@tipo_registro
    			,@documento_registro
    			,@dna_registro
    			,@fecha_registro
    			,@cliente_registro
    			,GETDATE()
    			,USER_NAME()
    			,1)
    
    		END
    END TRY
    BEGIN CATCH
    	SELECT ERROR_MESSAGE() AS ERRORMENSAJE
    	ROLLBACK TRAN
    --	RAISERROR ('Se ha producido un error inesperado, proceso incompleto',15,1)
    END CATCH
    cuando lo probe con usuario cliente..ya no me sale el error que habia mensionado,suspuestamente lo grabo,pero cuando revisamos la base de datos y abrimos la tabla jamas paso nada..,no lo grabo..,no se bien si el procedimiento arriba mostrado esta bien escrito con el ERROR_MESSAGE() que me sugieres que use..,muchas gracias
    miércoles, 13 de octubre de 2010 17:37
  • Hola.

    Si no se grabó nada seguramente se deba a algún tipo de error. ¿Qué mensaje de error se está recuperando? Puedes hacer esta prueba ejecutando el procedimiento con el usuario del cliente desde Management Studio (abriendo la aplicación con un Run As, por ejemplo).


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 13 de octubre de 2010 20:42
  • Hola alberto..,muchas gracias por responder..,sobre lo que me dice de hacerlo con el RUN AS..como seria...? el nombre del mi procedimiento almacenado es msp_ABMREGISTRO..me darias algun ejemplo o la forma de poder hacer lo que recomiendas..?..gracias
    jueves, 14 de octubre de 2010 13:41
  • Hola..,alberto,Carlos que tal..?estuve lidiando con el problema que les comente..,ahora note un algo raro..,en nuetra tabla registro tenemos un campo id_registro(autonumerico)insertamos 2 registro con el administrador y claro,sin problemas,luego como ya saben lo tratamos de hacer con un cliente del dominio pero nu hubo caso,hoy lo volvimos a hacer con el usuario administrador y como siempre inserto un registro..,pero no dimos cuenta que el autonumerico se fue al numero 12..,eso quiere decir que con el cliente del dominio estuvo insertando..?..gracias
    viernes, 15 de octubre de 2010 13:03
  • Hola.

    No nos has dicho qué mensaje de error estás recibiendo. Es normal que se incremente el autonumérico aunque no se graben los registros. En cuanto al "Run As" es simple, localizas el ejecutable de la aplicación y la tecla Shift pulsada, haces click derecho y verás la opción de ejecutar como otro usuario.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    jueves, 21 de octubre de 2010 19:29