2012-10-12 109 views
5

Tengo una instrucción de inserción como la siguiente. Puedo depurar mi procedimiento almacenado y recorrer mi código para verificar que mi código se ejecute, pero sucede algo gracioso.La instrucción de inserción de SQL Server se ejecuta satisfactoriamente pero los valores no se agregan a la tabla aunque se haya creado una fila

Los valores que espero guardar en la base de datos no se guardan. En su lugar, se crea una fila en la tabla y se crea correctamente el RecordCreatedField, incluso se incluye una clave principal, pero las columnas reales que espero insertar no. Todas las columnas son nvarchar/varchar, excepto las columnas de fecha y la ID, pero solo se rellenan esas columnas. Sin embargo, los siguientes @PRCUPC, @ PRCEAN, @ PRCGTIN, @ PRCatalogNumber se omiten de alguna manera.

EXEC spinsertprodcode 
        @pid out, 
        @ProdID, 
        @UPC, 
        @EAN, 
        @TIN, 
        @CNumber, 
        0, 
        0, 
        1, 
        @staid, 
        @counter out 



INSERT INTO dbo.ProdCodes 
(PRProductID 
,PRCUPC 
,PRCEAN 
,PRCGTIN 
,PRCatalogNumber 
,PRIsReplacement 
,PRIsReplaced 
,PRCRecordCreatedDate 
,PRCIsActive 
,PRStatusFlag) 

OUTPUT INSERTED.PRCID INTO @opID 

VALUES 
(@PRProductID, 
@PRCUPC, 
@PRCEAN, 
@PRCGTIN, 
@PRCatalogNumber, 
@PRIsReplacement , 
@PRIsReplaced, 
GETDATE(), 
@PRCIsActive, 
@PRStatusFlag) 

SELECT @PRCID = O.ID FROm @opID O 

Agradecería cualquier sugerencia sobre cómo puedo solucionar esto o entender lo que está pasando.

Image of the Debug Screen where I confirm the right values are passed

Aquí es un violín SQL de la principal procedimiento almacenado que llama a mi código de inserción. SQL Fiddle of my code

+6

¿Puede publicar el código que está utilizando para llamar al procedimiento almacenado? Supongo que los parámetros no se han configurado correctamente, tal vez. – d89761

+0

Puedo desplazarme sobre los valores para confirmar que se pasaron correctamente. Y paso al código llamado al punto de inserción y también puedo verificar que los valores estén allí incluso para instalar el punto. – Kobojunkie

+1

¿Hay un disparador sobre la mesa? –

Respuesta

1

@Kobojunkie: Este tipo de problemas se puede manejar fácilmente si sigue una de las reglas de oro de Buenas Prácticas de T-SQL: use un bloque try/catch para envolver su código para INSERT y DELETE. Tener un bloque CATCH approapiate incluyendo variables del sistema como ERROR_NUMBER, ERROR_SEVERITY, ERROR_PROCEDURE, ERROR_LINE y ERROR_MESSAGE le dará pistas acerca de lo que va mal con el que se realiza la acción:

BEGIN CATCH 
    SELECT @ErrorDetails = 
      N'Error raised when executing [Insert/Delete] statement: ' 
      + N' SQL Error: ' + ERROR_NUMBER() 
      + N', Level: ' + ERROR_SEVERITY() 
      + N', Line: ' + ERROR_LINE() 
      + N', Message: ' + ERROR_MESSAGE() 
END CATCH 

Esperamos que esta información ayuda a solucionar el problema dentro de la sproc !

Cuestiones relacionadas