Hur skulle jag kunna skapa en transaktion för att endast köra den andra deleten om den första raderat något?
ALTER PROCEDURE sp_delPict
(
@id bigint,
@uid bigint
)
AS
DELETE FROM pictures WHERE id=@id AND advId=@uid
DELETE FROM search_pics WHERE picid=@id
RETURN
BEGIN TRANSACTION
DELETE FROM pictures WHERE id=@id AND advId=@uid
IF (@@ROWCOUNT>0)
BEGIN
DELETE FROM search_pics WHERE picid=@id
END
COMMIT TRANSACTION
såhär, men du borde inte göra på det här sättet , sätt hellre ON DELETE CASCADE på "search_pics" så slipper du oroa dig över om något har blivit raderat i tabell 1.
Jo, jag vet men när jag testade det så fick jag detta:
- Det går inte att skapa relationen FK_search_pics_pictures.
ADO-fel: Introducing FOREIGN KEY constraint 'FK_search_pics_pictures' on table 'search_pics' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
Vet inte vad jag har hittat på.
Primärnyckeltabell : Pictures id
Sekundärnyckeltabell : search_pics picid
-ADO-fel: Introducing FOREIGN KEY constraint 'FK_search_pics_pictures' on table 'search_pics' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Detta fel får du för att du satt ON DELETE CASCADE på tabeller som redan är involverade i en DELETE CASCADE. Du måste tänka i hierarkiska relationer när du sätter CASCADE