QUOTE (Uwe Friedrich @ Fr 30.12.2005, 19:41)Soweit war ich schon, mir ging es um die schnellste Methode um festzstellen, ob denn der Datensatz schon vorhanden ist. Also, ob es etwas Effektiveres gibt als erst einen Select zu machen und dann zu entscheiden das bei RecordCount = 0 ein Insert zu wählen ist und bei RecordCount > 0 ein Update.
Etwas was mir diesen Select erspart, evtl. gleich als komplettes SQL-Statement.
Ich wüsste nichts SQL-mässiges, was das könnte (kenne aber auch MySQL nicht). Für mich hab ich das Problem so gelöst, dass beim Tabellendesign immer festgelegt wird, dass Primärschlüsselfelder nicht den Wert (die Zahl) 0 enthalten dürfen, Schlüsselwerte also bei 1 beginnen. Dann gibts jeweils eine Stored Procedure, welche abhängig vom übergebenen Schlüsselwert einen Insert (bei 0) oder Update (bei >0) macht. Das Frontend muss lediglich sicherstellen, dass bei allen Records, die innerhalb vom Frontend neu erstellt werden, im Schlüsselfeld 0 steht. Zum Speichern übergibt es dann einfach alle Werte an die Stored Procedure, und die macht den Rest. Beispiel-Procedure aus SQL Server:
CODE CREATE PROCEDURE P_SetDetail
(
@DetailID int,
@FotoID int,
@DetailKey nvarchar(50),
@Titel nvarchar(250),
@Text nvarchar(4000)
)
AS
DECLARE @NewID int, @NewSort smallint
IF @DetailID=0
BEGIN -- Insert
SET @NewSort = (ISNULL((SELECT MAX(Sort) FROM T_Details WHERE DetailKey=@DetailKey),0) + 1)
INSERT INTO T_Details (FotoID, DetailKey, Titel, Text, Sort)
VALUES (@FotoID, @DetailKey, @Titel, @Text, @NewSort)
SET @NewID=@@IDENTITY
END
ELSE
BEGIN -- Update
UPDATE T_Details SET FotoID=@FotoID, DetailKey=@DetailKey, Titel=@Titel, Text=@Text
WHERE DetailID=@DetailID
SET @NewID=@DetailID
END
RETURN (@NewID)
GO
Griessli
Irene