Vilket sätt är korrekt då Selecten inte säkert retunerar något.
DECLARE @total int;
SET @total = (SELECT t.Amount FROM Table1 t WHERE t.Id = @id)
Alt 1.
IF(@total > 0)
...
Alt 2.
IF(@total > NULL)
...
Alt 3.
IF(@total IS NOT NULL)
...
9 svar · 522 visningar · startad av Dino
Vilket sätt är korrekt då Selecten inte säkert retunerar något.
DECLARE @total int;
SET @total = (SELECT t.Amount FROM Table1 t WHERE t.Id = @id)
Alt 1.
IF(@total > 0)
...
Alt 2.
IF(@total > NULL)
...
Alt 3.
IF(@total IS NOT NULL)
...
Jag tänker inte ens fundera innan du berättar vilken dbms du använder.
Sql Server 2005. Finns det någon annan? ;)
Vad vill du? Är du intresserad av värdet på amount eller vill du bara veta om det finns någon post? Kan det finnas flera poster för samma id?
Jag hade gjort så här:
SET @total = COALESCE((SELECT t.Amount FROM Table1 t WHERE t.Id = @id), 0)
, och kört på alternativ 1.
mvh
Ok, ändrar helt för att göra det tydligare. Selecten retunerar bara en post. Använder Alt 1 just nu och det verkar fungera, men är det rätt.
DECLARE @id int, @total int;
SELECT @id = t.Id, @total = t.Amount
FROM Table2 t
WHERE t.Table1Id = @table1id AND t.Key = @key;
[B]Alt 1.[/B]
IF(@id > 0)
BEGIN
UPDATE Table2 SET Amount = Amount + @total WHERE Id = @id;
END
ELSE
BEGIN
INSERT INTO Table2(Amount) VALUES(@total);
END
[B]Alt 2.[/B]
IF(@total > NULL)
BEGIN
UPDATE Table2 SET Amount = Amount + @total WHERE Id = @id;
END
ELSE
BEGIN
INSERT INTO Table2(Amount) VALUES(@total);
END
[B]Alt 3.[/B]
IF(@total IS NOT NULL)
BEGIN
UPDATE Table2 SET Amount = Amount + @total WHERE Id = @id;
END
ELSE
BEGIN
INSERT INTO Table2(Amount) VALUES(@total);
END
Strunta i select, gör update direkt och om @@rowcount = 0, gör insert
Sqlen jag håller på med är lite mer komplicerad än så, så i detta fallet fungerar inte det. Men bra tips att ta med mig.
Vill dock fortfarande ha svar på vilket alternativ som är det korrekta att kolla ovan villkor på.
Det är lite svårt för oss att besvara, när du inte ger oss hela frågan. Vi har svarat efter bästa förmåga enl. de uppgifter du gett oss.
LarsGs alternativ visade sig, som vanligt, fungerade bra. Tackar.