Hilfe beim Erstellen einer gespeicherten Prozedur

25/03/2008 - 17:31 von Brian Schmalisch | Report spam
Hallo,

ich benötige mal kurz Hilfe beim Erstellen einer SP unter MSSQL 2005
Express. Ich möchte, bevor ich Daten in eine Tabelle schreibe, überprüfen,
ob die Daten schon in der Tabelle sind. Sind diese nicht enthalten, dann
sollen die Daten eingefügt werden. In beiden Fàllen soll der Schlüssel
zurückgegeben werden.

Ich hatte das ganze mal vor langer Zeit unter MySQL gemacht - so
funktioniert es jedoch nicht in der MSSQL-DB.
Hier mal der Syntax unter MySQL:
PROCEDURE InsertLayouts (IN _value varchar(256), OUT _lid INT)
begin
declare anzahl int;
select count(*) into anzahl from layouts where Layoutname=_value;
if(anzahl=0)then
begin
insert into layouts(Layoutname) values(_value);
SET _lid=LAST_INSERT_ID();
end;
else
begin
select LID into _lid from layouts where Layoutname=_value;
end;
end if;
end

Wie kann ich das ganze umstricken oder vereinfachen unter MSSQL?

mfg

Brian
 

Lesen sie die antworten

#1 Elmar Boye
25/03/2008 - 17:47 | Warnen spam
Hallo Brian,

Brian Schmalisch schrieb:
ich benötige mal kurz Hilfe beim Erstellen einer SP unter MSSQL 2005
Express. Ich möchte, bevor ich Daten in eine Tabelle schreibe, überprüfen,
ob die Daten schon in der Tabelle sind. Sind diese nicht enthalten, dann
sollen die Daten eingefügt werden. In beiden Fàllen soll der Schlüssel
zurückgegeben werden.

Ich hatte das ganze mal vor langer Zeit unter MySQL gemacht - so
funktioniert es jedoch nicht in der MSSQL-DB.
Hier mal der Syntax unter MySQL:
PROCEDURE InsertLayouts (IN _value varchar(256), OUT _lid INT)
begin
declare anzahl int;
select count(*) into anzahl from layouts where Layoutname=_value;
if(anzahl=0)then
begin
insert into layouts(Layoutname) values(_value);
SET _lid=LAST_INSERT_ID();
end;
else
begin
select LID into _lid from layouts where Layoutname=_value;
end;
end if;
end

Wie kann ich das ganze umstricken oder vereinfachen unter MSSQL?



CREATE PROCEDURE dbo.InsertLayouts
(
@value varchar(256),
@out int OUT
)
AS
SET NOCOUNT ON

SELECT @out = LID
FROM dbo.layouts
WHERE layoutname = @value
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.layouts(layoutname)
VALUES(@value)
SELECT @out = SCOPE_IDENTITY()
END

Beachte, das der Code (wie schon bei MySql) so nicht
transaktionssicher ist.

Gruß Elmar

Ähnliche fragen