webForumDet fria alternativet

stored procedure & if

4 svar · 266 visningar · startad av ironhead

ironheadMedlem sedan mars 20011 346 inlägg
#1

Hej!

Jag har en SP som ser ut såhär:

CREATE PROCEDURE sFM
(
@fid varchar(100),
@rid varchar(100)
)
AS
BEGIN

DECLARE

  @sSQL nvarchar(500)

SET NOCOUNT ON

  SET @sSQL = 'INSERT INTO FR (iR,iF) VALUES(''' + @rid +''',''' + @fid + ''')'

print @sSQL

EXEC sp_executesql @sSQL

END
RETURN

Nu skulle jag vilja lägga till, att om en post redan finns i databasen, ska men uppdatera den istället, och finns den inte ska en ny post läggas till...jag har sett att det finns "if not exists" men hur skriver man?

Vill ha typ:

if not exists('SELECT * FROM FR WHERE iR='''+@rid+''' AND iF='''+@fid+'''') Then
' INSERT koden
else
' UPDATE koden
end if

Men hur ska det se ut egentligen?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
if not exists(
SELECT * 
  FROM FR 
WHERE iR= @rid 
AND iF=@fid) 
INSERT INTO FR (iR,iF) VALUES(@rid,@fid)
else
-- UPDATE koden

Det finns ingen anledning att bygga strängar och exekvera dem. Utför kommandona direkt i stället.

Det är inget then eller end if. Om du vill ha flera satser efter en if, använd begin/end

ironheadMedlem sedan mars 20011 346 inlägg
#3

1000 tack Lars!!!

Som en skänk från ovan ;)

btw kan man använda nåt annat kommando annat än EXEC sp_executesql @sSQL för att exekvera SP:s om man nödvändigtvis behöver stränga ihop sql-satser?

@ndersMedlem sedan juni 200032 969 inlägg
#4

Det borde gå alldeles utmärkt att använda endast EXEC @sSQL, så gör jag de gånger jag tvingas till det. Jag vet inte om det kanske blir så att sp_ExecuteSQL körs ändå, dock.

Mvh

ironheadMedlem sedan mars 20011 346 inlägg
#5

oki...Tack!

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