2012-10-12 3 views
5

Mam instrukcję wstawiania, jak poniżej. Jestem w stanie debugować moją procedurę przechowywaną i przechodzić przez mój kod, aby sprawdzić, czy mój kod działa, ale dzieje się coś śmiesznego.Instrukcja SQL Server Insert działa poprawnie, ale wartości nie są dodawane do tabeli, mimo że utworzono wiersz

Wartości, które należy zapisać w bazie danych, nie są zapisywane. Zamiast tego w tabeli tworzony jest wiersz, a kod RecordCreatedField jest poprawnie utworzony, nawet klucz podstawowy jest zawarty, ale kolumny, które oczekują na wstawienie, nie są. Wszystkie kolumny są nvarchar/varchar, z wyjątkiem kolumn daty i identyfikatora, ale tylko te kolumny są wypełnione. Jednak poniższe wartości @PRCUPC, @ PRCEAN, @ PRCGTIN, @ PRCatalogNumber zostały w jakiś sposób pominięte.

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 

Byłbym wdzięczny za wszelkie sugestie, w jaki sposób mogę to naprawić lub zrozumieć, co się dzieje.

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

Oto SQl skrzypce głównego przechowywanych proc, która wywołuje mój kod insert. SQL Fiddle of my code

+6

Czy możesz umieścić kod, którego używasz do wywoływania procedury przechowywanej? Zgaduję, że parametry nie są ustawione poprawnie. – d89761

+0

Mogę najechać kursorem na wartości, aby potwierdzić, że zostały poprawnie przekazane. I przechodzę do wywoływanego kodu do punktu wstawienia i jestem w stanie również zweryfikować, czy wartości są nawet do zainstalowania punktu. – Kobojunkie

+1

Czy na stole jest wyzwalacz? –

Odpowiedz

1

@Kobojunkie: Tego rodzaju problemów może być łatwo zarządzany jeśli się jednym z złotymi zasadami T-SQL Dobrych Praktyk: użyj bloku try/catch, by zakończyć swój kod dla INSERT i DELETE. Mając approapiate bloku catch tym zmiennych systemowych takich jak numer_błędu, ERROR_SEVERITY, ERROR_PROCEDURE, ERROR_LINE i ERROR_MESSAGE daje wskazówki na temat tego, co się dzieje złego działania wykonywane:

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 

nadzieję, że ta informacja pomaga rozwiązać problem w sproc !

Powiązane problemy