Error en procedimiento almacenado cuando no es ejecutado por un administrador
-
Wednesday, October 13, 2010 3:12 PM
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 :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..!!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
- Edited by qwalgrandeMVP, Moderator Wednesday, October 13, 2010 3:30 PM Título aclaratorio
All Replies
-
Wednesday, October 13, 2010 3:22 PM
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
-
Wednesday, October 13, 2010 5:37 PM
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 CATCHcuando 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 -
Wednesday, October 13, 2010 8:42 PMModerator
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/ -
Thursday, October 14, 2010 1:41 PMHola 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
-
Friday, October 15, 2010 1:03 PMHola..,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
-
Thursday, October 21, 2010 7:29 PMModerator
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/- Marked As Answer by qwalgrandeMVP, Moderator Monday, November 01, 2010 4:26 PM

