Einzelnen Beitrag anzeigen

hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

TADOCommand mit Parametern - PK-Verletzung

  Alt 12. Jun 2012, 12:26
Datenbank: MSSQL2008R2 • Version: ? • Zugriff über: ADO
Hallo Community!

Ich habe ein TADOCommand und befülle CommandText mit einem sql-statement-string, der ungefähr so aussieht:

DECLARE @TRANSE CHAR(8) = 'Transe00';
BEGIN TRANSACTION @TRANSE;
IF NOT EXISTS(SELECT * FROM ST_VKL WHERE ID=:@ID)
INSERT INTO ST_VKL (ID,NAME) VALUES(:@ID,:@NAME)
ELSE
UPDATE ST_VKL SET NAME=:@NAME WHERE ID=:@ID;
IF @@ERROR = 0
COMMIT TRANSACTION @TRANSE
ELSE
ROLLBACK TRANSACTION @TRANSE;

Dabei ist schonmal zu sagen, dass mein string in diesem vereinfachten Beispiel genau _2_ Parameter enthält, @ID und @NAME.
Beim Zuweisen des commandtextes werden aber automatisch 5 erstellt, nämlich @ID, @ID, @NAME, @NAME, @ID,
was besonders sinnvoll ist, liefert doch die methode parambyname nur einen zurück...
Egal, ich habe sie allesamt mit den richtigen Werten befüllt.
Dazu ist zu sagen, dass ich sie nach der automatischen Erstellung nur noch mit Werten befülle,
also weder den Typ, noch die Größe festlege, da ich das ganz allgemein umgesetzt habe und ich im allgemeinen Fall den Datentyp nicht kenne,
dazu benutze ich den Datentyp Variant.

Nun zu meinem eigentlichen Problem:
Wie man dem statement entnehmen kann wird geguckt, ob ein Datensatz mit der ID schon da ist,
wenn nein wird ein insert gemacht, wenn ja ein update - wie kann es da sein, dass ich beim executen eine PK-Verletzung kriege?
Das ist doch eigentlich VÖLLIG UNMÖGLICH!?!

Bin mit meinem Latein am Ende, ka was delphi da macht, habe bisher immer ohne Parameter gearbeitet und den string einfach so zusammengebaut und da geht das.
Und wenn ich mein sql-statement ins ManagementStudio kopiere und statt der Parameter die Werte einfüge, funktioniert alles einwandfrei...
  Mit Zitat antworten Zitat