Έστω ότι έχουμε το ακόλουθο σε ένα Stored Procedure:
EXEC @ArtistID = AddArtist @ArtistName
Αυτό που κάνει το procedure AddArtist είναι να ψάχνει αν υπάρχει ο Artist (με βάση την παράμετρο ArtistName). Αν υπάρχει, επιστρέφει το περιεχόμενο της στήλης id που αντιστοιχεί σε αυτόν, αλλιώς κάνει INSERT μία νέα εγγραφή με περιεχόμενο το ArtistName και επιστρέφει το id αυτής.
Έχω γράψει αυτό, αλλά κάτι δε δουλεύει σωστά και δεν εξάγει το key που ψάχνω (βγάζει πάντα 0, το default):
CREATE PROCEDURE AddArtist
@ArtistName nvarchar(max)
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
IF NOT EXISTS (SELECT id FROM artists WHERE displayname=@ArtistName)
BEGIN
INSERT INTO artists (displayname) VALUES (@ArtistName)
SELECT @@IDENTITY
END
ELSE
SELECT id FROM artists WHERE displayname=@ArtistName
COMMIT TRANSACTION
RETURN
Υ.Γ. Ξέρω ότι δεν είναι ο καλύτερος αλγόριθμος από πλευράς απόδοσης, αλλά προς το παρόν θέλω απλά να δουλεύει και η βελτιστοποιηση έπεται...