![]() |
Datenbank: MS SQL 2005 • Version: Express • Zugriff über: ADO
SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt
Moin zusammen,
ich habe mir heute die Stored Procedures angesehen, da ich demnächst einen Datenimport von mehr als 1.000.000 Datensätzen vornehmen muss. Meine Test "UPSERT" Prozedure sieht wie folgt aus.
Delphi-Quellcode:
Wenn ich die Prozedure im MS SQL Server Management Studio ausführe, funktioniert alles besten. Wenn ich es die Prozedure im Program aufrufe, siehe Quellcode unten, kam ein Fehler.
USE [KECDB_TEST]
GO /****** Objekt: StoredProcedure [dbo].[sp_upsert] Skriptdatum: 04/18/2011 08:11:24 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[sp_upsert] -- Add the parameters for the stored procedure here @snr nvarchar(9), @b_ftag nvarchar(4), @b_datum nvarchar(8) AS SET transaction isolation level SERIALIZABLE SET NOCOUNT ON BEGIN TRANSACTION Upsert update mat_beweg set snr = @snr, b_ftag = @b_ftag, b_datum = @b_datum where snr = @snr if @@rowcount = 0 and @@error=0 begin insert into mat_beweg (snr, b_ftag, b_datum) values (@snr, @b_ftag, @b_datum) end COMMIT TRANSACTION Upsert Zitat:
![]() Mein Program sieht jetzt wie folgt aus und funktioniert.
Delphi-Quellcode:
Was ich nicht verstehe, warum muss man die Parameter erstellen? Sie sind doch schon laut sp_upsert Prozedure definiert und man müsst doch ohne weiteres darauf zu greifen können, wie Versuch 1-2 zeigen.ConnectToSQLServer; // Funktion zum Aufbau der SQL Verbindung ... with sp_upsert do begin ProcedureName := 'sp_upsert'; Prepared; // ---> 1. Versuch: Resultat: Fehler // Parameters.ParamByName('snr').Value := '210210210'; // Parameters.ParamByName('b_ftag').Value := '6272'; // Parameters.ParamByName('b_datum').Value := '20110418'; // ---> 2. Versuch: Resultat: Fehler // Parameters.ParamValues['@snr'] := '210210210'; // Parameters.ParamValues['@b_ftag'] := '6272'; // Parameters.ParamValues['@b_datum'] := '20110418'; // ---> 3. Versuch: alles OK for i := 0 to 10000 do begin Parameters.Clear; Parameters.CreateParameter('@snr', ftString, pdInput, 9, IntToStr(i)); Parameters.CreateParameter('@b_ftag', ftString, pdInput, 4, '6272'); Parameters.CreateParameter('@b_datum', ftString, pdInput, 8, FormatDateTime('hh:nn:ss', now)); ExecProc; end; end; Wäre nett, wenn mir dazu einer eine kleine Erklärung geben könnte. Eventuell ist ja der Quellcode aus dem 3. Versuch nicht wirklich die Lösung und es geht noch besser. Danke im Voraus. Sven |
AW: SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt
Versuch es mal so
Delphi-Quellcode:
Ansonsten musst du das halt durch
ConnectToSQLServer; // Funktion zum Aufbau der SQL Verbindung
... with sp_upsert do begin ProcedureName := 'sp_upsert'; // Parameter-Liste aktualisieren Parameters.Refresh; // So wird Prepared :o) Prepared := True; for i := 0 to 10000 do begin Parameters.ParamValues['@snr'] := '210210210'; Parameters.ParamValues['@b_ftag'] := '6272'; Parameters.ParamValues['@b_datum'] := '20110418'; ExecProc; end; // Prepared := False; end; ![]() |
AW: SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt
Vielen Dank. Das hat geklappt.
Schönen Tag noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz