webForumDet fria alternativet

Delete-transaktion SP?

5 svar · 279 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 058 inlägg
#1

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
NöffMedlem sedan nov. 2003569 inlägg
#2

(ms-sql-server)

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.

Jesper TMedlem sedan nov. 20017 058 inlägg
#3

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

Jesper TMedlem sedan nov. 20017 058 inlägg
#4

Ok, det verkar funka om man inte väljer ON DELETE CASCADE i relationen. Av någon märklig anledning.

NöffMedlem sedan nov. 2003569 inlägg
#5

-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

NöffMedlem sedan nov. 2003569 inlägg
#6

Ok, det verkar funka om man inte väljer ON DELETE CASCADE i relationen. Av någon märklig anledning.

Jo, mitt exempel visar hur man gör om du INTE använder ON DELETE CASCADE, men det är inget att rekommendera. sätt CASCADE :h

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb