2012-10-12 16 views
5

Aşağıda bir ekleme ifadem var. Saklı yordamımı hata ayıklayabilir ve kodumun çalıştığını doğrulamak için kodumdan geçebilirim, ancak komik bir şey olur.SQL Server ekleme deyimi başarılı bir şekilde çalışır, ancak satır oluşturulsa bile değerler tabloya eklenmez

Veritabanına kaydedilmesini beklediğim değerler kaydedilmez. Bunun yerine, tablodaki bir satır oluşturulur ve RecordCreatedField doğru oluşturulur, hatta birincil anahtar dahil edilir, ancak eklenmesini beklediğim gerçek sütunlar değil. Tüm sütunlar, tarih sütunları ve kimlik hariç nvarchar/varchar'dur, ancak yalnızca bu sütunlar doldurulur. Ancak aşağıdaki @ PRCUPC, @ PRCEAN, @ PRCGTIN, @ PRCatalogNumber bir şekilde ihmal edilmiştir.

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 

bunu düzeltmek veya ne olup bittiğini anlayabilir nasıl bir öneride takdir ederim.

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

İşte benim insert kodunu çağıran ana Saklanan proc bir SQl keman olduğunu. SQL Fiddle of my code

+6

Kullanılan kodu çağırmak için kullandığınız kodu kaydeder misiniz? Parametrelerin doğru ayarlanmadığını tahmin edebilirim. – d89761

+0

Doğru şekilde iletildiğini doğrulamak için değerlerin üzerine geliyorum. Araya eklenen kodun içine ekleme noktasını giriyorum ve aynı zamanda değerlerin yükleme noktası için bile olduğunu doğrulayabiliyorum. – Kobojunkie

+1

Tabloda bir tetik var mı? –

cevap

1

@Kobojunkie: Eğer T-SQL İyi Uygulamalar altın kurallarından biri izlerseniz konuların Bu tür kolayca yönetilebilir: ifadeleri INSERT için kodunuzu sarın ve SİL bir TL/CATCH bloğu kullanın. Bu bilgi sproc içinde sorunu çözmek için yardımcı olur

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 

Hope: ERROR_NUMBER, ERROR_SEVERITY, ERROR_PROCEDURE, ERROR_LINE ve ERROR_MESSAGE gibi sistem değişken içeren approapiate CATCH bloğu olması size eylem gerçekleştirildiği yanlış neler olduğunu dair ipuçları verecektir !

İlgili konular