General information
Forum:
Microsoft SQL Server
Category:
Stored procedures, Triggers, UDFs
Hi Mike,
Here's the VFP code which calles the SP:
lnResult = SqlExec(lnBlDbHandle, 'Exec sp_UpdateBulkLoad @tiBedrijfId=' +
Transform(.piBedrijfId) + ",@tcLangUp='NL'")
I had a lot of test code in my SP to see where it goes wrong. There's not a consistent place however. I keep adding test code till I'm sure I catch the bug, but then it failes on a complete other part of the code. Here's the Sp code without test code (sorry for the Dutch phrases):
CREATE Procedure sp_UpdateDier
(
@tiBedrijfId Int,
@tcLangDown t_Language,
@tcSourceApp VarChar(30)
)
As
Declare @liRowCount Int,
@iBlDierId Int,
@lDelete Bit,
@liError Int,
@pk_Dier Int,
@Naam Char(30),
@Roepnaam Char(15),
@lMale Bit,
@GeboorteDatum t_Datum,
@DierSoort SmallInt,
@Eigenaar Char(30),
@Vader t_Levensnummer,
@Moeder t_Levensnummer,
@EtMoeder t_Levensnummer,
@pk_AvWSqlId Int,
@VaderId Int,
@MoederId Int,
@EtMoederId Int,
@LevensNr t_LevensNummer,
@llNew Bit,
@lcArgs VarChar(1000),
@liSource Int
Declare c_Bulkload Cursor Local For
Select r.LevensNr,d.iBlDierId,d.lDelete,d.pk_Dier,d.Naam,d.Roepnaam,
d.lBlMale,d.GeboorteDatum,d.DierSoort,d.Eigenaar,d.Vader,d.Moeder,
d.EtMoeder,s.pk_Source As iSource
From Dier d
Left Join Rund r On r.iBlDierId = d.iBlDierId
Left Join AvWSql.dbo.Source s On s.cApp = @tcSourceApp And s.cSource = d.cSource
Where d.pk_Bedrijf = @tiBedrijfId
Open c_Bulkload
Fetch Next From c_Bulkload
Into @LevensNr,@iBlDierId,@lDelete,@pk_Dier,@Naam,@Roepnaam,@lMale,@GeboorteDatum,@DierSoort,@Eigenaar,@Vader,@Moeder,@EtMoeder,@liSource
While @@Fetch_Status = 0
Begin
Set @liError = 0
Set @liRowCount = 0
Set @llNew = 0
-- Check eerst of dit dier wel op dit bedrijf thuishoort.
If Not @pk_Dier Is NULL And @pk_Dier > 0
Begin
Select pk_Dieren
From AvWSql.dbo.Dieren
Where pk_Dieren = @pk_Dier
And fk_Bedrijf = @tiBedrijfId
Select @liError = @@Error, @liRowCount = @@RowCount
If @liError = 0 And @liRowCount = 0
Begin
Set @pk_Dier = NULL
Update Dier
Set pk_Dier = @pk_Dier
Where iBlDierId = @iBlDierId
And pk_Bedrijf = @tiBedrijfId
End
End
Set @pk_AvWSqlId = @pk_Dier
If @lDelete Is NULL Or @lDelete = 0
Begin
Exec AvWSql.dbo.sp_GetDierId @tiBedrijfId=@tiBedrijfId,
@tcLevensNummer=@LevensNr,@tiDierId=@pk_AvWSqlId Output
-- Als een dier al bestaat met een ander Id wordt dat record
-- gebruikt, dus duplicaat deleten.
-- Hierbij moet wel het nieuwe id terug gestuurd worden.
If Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0 And
(@pk_Dier Is NULL Or @pk_AvWSqlId <> @pk_Dier)
Begin
Set @llNew = 1
If Not @pk_Dier Is NULL And @pk_Dier > 0
Set @lDelete = 1
End
-- Updaten of inserten alleen als er gegevens aanwezig zijn.
If Not (@LevensNr Is NULL And @Naam Is NULL And
@Roepnaam Is NULL And @lMale Is NULL And
@GeboorteDatum Is NULL And @DierSoort Is NULL And
@Eigenaar Is NULL And @Vader Is NULL And
@Moeder Is NULL And @EtMoeder Is NULL And @liSource Is NULL)
Begin
-- Bepaal eerst even de ouder-records.
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@Vader,
@tiParentId = @VaderId Output
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@Moeder,
@tiParentId = @MoederId Output
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@EtMoeder,
@tiParentId = @EtMoederId Output
If @liSource Is NULL
Exec AvWSql.dbo.sp_GetSourceId
@tcApp = @tcSourceApp,
@tcSource = NULL,
@tiSourceId = @liSource Output
If Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Begin
Update AvWSql.dbo.Dieren
Set cdd202491 = @Naam,
cdd202495 = @Roepnaam,
lMale = @lMale,
ddd201695 = @GeboorteDatum,
ndd200068 = @DierSoort,
cdd202222 = @Eigenaar,
Vader = @VaderId,
Moeder = @MoederId,
Et_Moeder = @EtMoederId,
fk_Source = @liSource
Where pk_Dieren = @pk_AvWSqlId
Select @liError = @@Error,
@liRowCount = @@RowCount
End
-- Als het record nog niet bestaat gaan we het
-- toevoegen.
If @liError = 0 And @liRowCount = 0
Begin
If Not @LevensNr Is Null And @LevensNr <> ''
Begin
Set @llNew = 1
Insert Into AvWSql.dbo.Dieren
(fk_Bedrijf,cdd202491,cdd202495,lMale,
ddd201695,ndd200068,cdd202222,Vader,
Moeder,Et_Moeder,fk_Source)
Values(@tiBedrijfId,@Naam,@Roepnaam,
@lMale,@GeboorteDatum,@DierSoort,
@Eigenaar,@VaderId,@MoederId,
@EtMoederId,@liSource)
Select @liError = @@Error,
@pk_AvWSqlId = @@Identity,
@llNew = 1
If @liError = 0 And
Not @pk_AvWSqlId Is NULL And
@pk_AvWSqlId > 0
Begin
Insert Into AvWSql.dbo.Rundvee
(fk_Dieren, cdd204100)
Values(@pk_AvWSqlId, @LevensNr)
Select @liError = @@Error
End
End
Else
Begin
Set @lcArgs = ''
If @Naam <> ''
Set @lcArgs = RTrim(@Naam)
If @RoepNaam <> ''
If @lcArgs <> ''
Set @lcArgs = @lcArgs
+ ' (' +
RTrim(@RoepNaam) + ')'
Else
Set @lcArgs =
RTrim(@RoepNaam)
If @lcArgs <> ''
Exec sp_SetUpdateResult
@tiBedrijfId=@tiBedrijfId,
@tcLanguage=@tcLangDown,
@tcKey='Geen levensnummer bekend',
@tcArg=@lcArgs
End
End
If @liError = 0 And @llNew = 1 And
Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Update Dier
Set pk_Dier = @pk_AvWSqlId,
lBlNew = @llNew
Where pk_Bedrijf = @tiBedrijfId
And iBlDierId = @iBlDierId
End
End
If @liError = 0 And @lDelete = 1 And
Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Begin
Delete From AvWSql.dbo.Dieren
Where pk_Dieren = @pk_AvWSqlId
And fk_Bedrijf = @tiBedrijfId
Set @liError = @@Error
End
If @liError <> 0
Begin
Exec sp_SetProcessError @tiBedrijfId = @tiBedrijfId,
@tcLanguage = @tcLangDown, @tcOnderdeel = 'Dier',
@tiBlDierId = @pk_AvWSqlId, @tiError = @liError
End
Fetch Next From c_Bulkload
Into @LevensNr,@iBlDierId,@lDelete,@pk_Dier,@Naam,@Roepnaam,@lMale,@GeboorteDatum,@DierSoort,@Eigenaar,@Vader,@Moeder,@EtMoeder,@liSource
End
Close c_Bulkload
Deallocate c_Bulkload
GO
Previous
Next
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only