Skulle skriva en trigger som vid varje updatering av en tabell kontrollerar om ett värde överstigit 5 och Vad är problemet? I min värld så kommer den där koden uppdatera alla rader i tabellen varje gång...men jag kanske tänker fel... Men det ser inte ut som om du tar hänsyn till den uppdaterade raden utan bara bara "generellt"... Men har inte ätit lunch ännu och är lite seg i huvudet så om jag yrar så ber jag om ursäkt... Jo, tycker själv att denna koden borde funkar, men Visual Studio 2005 god tar den inte... =( Jag tycker inte att den borde fungera, tänker på samma sak som Chris; du har ju inga where-villkor så alla rader kommer ändra värde, oavsett om de borde det eller inte.. FROM storage s Pröva: Jo det har du rätt i, men det fungerade tyvärr inte: Har storage ett fält som heter needSorting och är det int? Du kan inte dela på din update Håller inte med dig Micke. Håkan. Mmmmm, visst är det så om man ska uppnå logiken trådskaparen eftersträvar.Trigger i SQL Express 2005
isf updatera ett annat värde till ett:
-------------------------- Update Storage After Update----------------------------------------
CREATE TRIGGER usau
ON storage
FOR UPDATE
AS
BEGIN
DECLARE
@added int,
@deleted int
SELECT
@added = palletAdded,
@deleted = palletDeleted
If (@added = @deleted)'Sätter vi dem båda till 0
begin
UPDATE storage SET palletAdded = 0, palletDeleted = 0
end
Else
if (@deleted > 4)'Sätter vi needsorting = 1
begin
UPDATE storage SET needSorting = 1
end
FROM storage s
INNER JOIN Updated u ON (u.pos = s.pos)
WHERE Updated.pos = s.pos
-----------------------------------------------------------------------------------------------------
Någon som har några tips?
Databas: SQL Express 2005
Program: Visual Studio 2005
/mvh OskarSv: Trigger i SQL Express 2005
Sv:Trigger i SQL Express 2005
Sv: Trigger i SQL Express 2005
Sv: Trigger i SQL Express 2005
INNER JOIN Updated u ON (u.pos = s.pos)
WHERE Updated.pos = s.pos
Detta skrav jag ju i slutet, räcker inte det?
/mvh OskarSv:Trigger i SQL Express 2005
<code>
SELECT
@added = palletAdded,
@deleted = palletDeleted
FROM storage s
INNER JOIN Updated u ON (u.pos = s.pos)
IF (@added = @deleted) BEGIN --Sätter vi dem båda till 0
UPDATE storage SET palletAdded = 0, palletDeleted = 0
END
IF (@deleted > 4) BEGIN --Sätter vi needsorting = 1
UPDATE storage SET needSorting = 1
END
</code>
Gäller bara syntaxen, inte logiken.
/HåkanSv: Trigger i SQL Express 2005
---------------------------------------------------------
Incorrect syntax near 'END'
---------------------------------------------------------Sv:Trigger i SQL Express 2005
Annars kanske det saknas ett END sist i triggern (efter IF satserna).
/HåkanSv: Trigger i SQL Express 2005
Det måste stå UPDATE...FROM bla bla mellan BEGIN END
Felet du får är att du har en halv sqlsats (som inleds med FROM)
därav felet (syntax nära end = strax efter...)
/mickeSv:Trigger i SQL Express 2005
Ser inget fel med IF satserna, eller med den UPDATE sats som körs i respektive IF.
Fast jag kan ha missat något.
/HåkanSv: Trigger i SQL Express 2005
Koden du skrivit är bara 50%
Kolla originalfrågan!
Det kan INTE stå
if ???
BEGIN
UPDATE xxxxx
END
FROM zzzz
Det måste stå
if ???
BEGIN
UPDATE xxxxx
FROM zzz
END
Annars uppdateras allt i tabellen (som en tidigare fråga gjorde gällande att det INTE skulle göras!)
och man har en föräldralös FROM i slutet.
@added int,
@deleted int
SELECT
@added = palletAdded,
@deleted = palletDeleted
FROM inserted
If (@added = @deleted)--Sätter vi dem båda till 0
begin
UPDATE storage SET palletAdded = 0, palletDeleted = 0
FROM storage s
INNER JOIN Inserted u ON (u.pos = s.pos)
end
Else if (@deleted > 4)--Sätter vi needsorting = 1
begin
UPDATE storage SET needSorting = 1
FROM storage s
INNER JOIN Inserted u ON (u.pos = s.pos)
end
OCH DESSUTOM heter tabellen inserted, även om man gör en UPDATE
/micke
EDIT:Kodjustering...Sv:Trigger i SQL Express 2005
Som jag skrev tidigare i ett inlägg i tråden "gäller bara syntaxen inte logiken".
Så även i detta fallet, hade bara syntaxglasögonen på mig.
I stand (logically) corrected.
/Håkan