webForumDet fria alternativet
Logga in / Bli medlem

Delete-transaktion SP?

Databaser & SQL

5 svar · 281 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Trådstart#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
Medlem 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.

Medlem sedan nov. 20017 144 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

Medlem sedan nov. 20017 144 inlägg
#4

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

Medlem 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

Medlem 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

259 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)