webForumDet fria alternativet

SP nästlade if-satser?

Databaser & SQLur Databashanterare & SQL

6 svar · 622 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej!

behöver hjälp med denna SP:

CREATE PROCEDURE ...
(
...
)
AS
BEGIN

SET NOCOUNT ON

if exists(SELECT....)
if <fält> = 0
UPDATE RecipeRate SET Rate=@sRate WHERE UserID=@suser and RecipeID=@sRecipeID
else
INSERT INTO RecipeRate (UserID,RecipeID,Rate) VALUES(@suser,@sRecipeID,@sRate)

END
RETURN

Jag vill att om post finns men ett viss fält är noll (0) (den röda texten) då ska updatesatsen köras annars en INSERT

går det att kolla värde i fältet direkt i SP eller måste jag lägga värdet i en variabel och sedan använda det?

Medlem sedan jan. 20011 140 inlägg
#2
if (select fält from tabell) = 0
Medlem sedan mars 20011 346 inlägg
#3

Fint! :) Nu ser den ut såhär:

CREATE PROCEDURE ...
(
...
)
AS
BEGIN

SET NOCOUNT ON

if exists(SELECT....)
if (select fält from tabell) = 0
UPDATE RecipeRate SET Rate=@sRate WHERE UserID=@suser and RecipeID=@sRecipeID
else
INSERT INTO RecipeRate (UserID,RecipeID,Rate) VALUES(@suser,@sRecipeID,@sRate)

END
RETURN

Kommer min if-satser att funka korrekt nudå?

att om posten finns och fält = 0 då uppdaterar vi
att om posten inte finns då blir det en INSERT
?

kommer inte andra if-satsen att "ta över" else?

eller är det bättre att göra såhär:

CREATE PROCEDURE ...
(
...
)
AS
BEGIN

SET NOCOUNT ON

if exists(SELECT....)
if (select fält from tabell) = 0
UPDATE RecipeRate SET Rate=@sRate WHERE UserID=@suser and RecipeID=@sRecipeID

if not exists(SELECT....)
INSERT INTO RecipeRate (UserID,RecipeID,Rate) VALUES(@suser,@sRecipeID,@sRate)

END
RETURN

Medlem sedan mars 20011 346 inlägg
#4

Drog till med det andra alternativet...funkar kanon...tack! :)

Medlem sedan dec. 200012 464 inlägg
#5
if (select fält from tabell) = 0

är inte bra om det finns mer än 1 post i tabellen. Använd if exists

Medlem sedan mars 20011 346 inlägg
#6

LarsG skrev:

if (select fält from tabell) = 0

är inte bra om det finns mer än 1 post i tabellen. Använd if exists

Jag körde:

if (select fält from tabell WHERE fält1=@tjo AND fält2=@tjim) = 0

..är det ändå bättre att köra exists?

Medlem sedan dec. 200012 464 inlägg
#7

Ja.

131 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)