Toon posts:

[SQL server] waarde automatisch wijzigen

Pagina: 1
Acties:
  • 161 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoe moet ik in SQL server een waarde automatisch wijzigen als er een bepaalde voorwaarde is voldaan? Dus hetvolgende is het geval:
in tblBlaat heb ik een kolom intWaarde. Als ik kolom intWaarde in een nieuw record bijvoorbeeld de waarde 8 wordt ingevoerd wil ik dat daar waarde 15 komt te staan, maar alleen wanneer waarde 8 wordt ingevoerd, andere nooit. Ik wil niet de default waarde van het veld wijzigen.

Ik dacht zelf aan een Rule of een Default, maar heb daar nog nooit mee gewerkt, iemand anders?

Verwijderd

verschillende mogelijkheden:
1) de code die de insert uitvoert opzadelen met een check: if 8 then 15
2) een INSERT trigger maken, die indien het 8 is de value update met '15' (en een UPDATE trigger natuurlijk, wanneer je de column wijzigt)
3) een computed column erbij plaatsen die de waarde uit intWaarde reflecteert en bij 8 de waarde '15' kiest. Je code die de waarde intWaarde moet gaan interpreteren, moet dan dus kijken naar de computed column.

Verwijderd

Topicstarter
Ehm, nee dat is geen oplossing. Het probleem is hetvolgende: een andere (niet door ons ontwikkelde applicatie) schrijft gegevens weg in een SQL-server7 database. Vervolgens doet deze applicatie ook dingen op basis van het gegeven dat in die kolom staat. Ik ben dus afhankelijk van deze aplicatie en moet IN SQL-server aanpassingen doen die er voor zorgen dat gegevens op het moment dat ze worden opgeslagen direct worden aangepast.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je en bij optie 2 maak je de aanpassing dus ook gewoon in sql server. Ik zou in de help maar een zoeken op trigger

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Verwijderd schreef op 12 augustus 2002 @ 09:51:
Ehm, nee dat is geen oplossing. Het probleem is hetvolgende: een andere (niet door ons ontwikkelde applicatie) schrijft gegevens weg in een SQL-server7 database. Vervolgens doet deze applicatie ook dingen op basis van het gegeven dat in die kolom staat. Ik ben dus afhankelijk van deze aplicatie en moet IN SQL-server aanpassingen doen die er voor zorgen dat gegevens op het moment dat ze worden opgeslagen direct worden aangepast.
Dat zeg ik: INSERT trigger :)

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 19-06 09:25

Tom-my

w03iz0rz

Even ter info voor jeroendega, triggers zitten dus in mssql server he :D, ennuh doet er niet toe wat die applicatie doet, je maakt die triggers OP de database..

"Then there was the man who drowned crossing a stream with an average depth of six inches."


Verwijderd

Topicstarter
OK, sorry, te snel gelezen... ik dacht dat je het over een stored procedure had. Hoe zou zo'n trigger er uit zien?

Verwijderd

Topicstarter
Ik heb nu dit:

code:
1
2
3
4
5
6
7
8
CREATE TRIGGER [trNulWordtEen] ON [dbo].[tabelnaam] 
FOR INSERT, UPDATE
AS 
IF (SELECT aantal FROM tabelnaam) = 0
    begin
         UPDATE tabelnaam
            SET aantal = 1
    end


Maar dat werkt niet, SQL-server zegt dat er meer dan één regel wordt geupdated, logisch, want ik geef geen beperking mee. Hoe kan ik meegeven dat het alleen gaat om deze regel? (het veld 'ID' is een unieke sleutel, dus iets in de zin van WHERE ID = 'IDUitDeGewijzigdeRegel')

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Als je in de BooksOnline kijkt bij inserted tables dan vind je wat je wil weten (als ik je goed begrijp tenminste).

Today's subliminal thought is:


Verwijderd

Annie: krek.

je moet de ID uit 'inserted' halen. dus:
UPDATE tabelnaam SET aantal=1 WHERE ID in (SELECT ID FROM inserted)

Verder raad ik je aan books online te openen en bij triggers te kijken hoe je die moet maken. Is stukken sneller dan hier vragen en wachten op antwoord ;))

Verwijderd

Topicstarter
Na zelf klooien en de hulp die hier geboden is ben ik gekomen tot:
code:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER [trNulWordtEen] ON [dbo].[Orsrg] 
FOR INSERT, UPDATE
AS 
declare @ID int, @esr_aantal int

SELECT @ID = ID , @esr_aantal = esr_aantal FROM inserted 
IF @esr_aantal = 0 
    begin
         UPDATE orsrg
            SET esr_aantal = 1
            WHERE ID = @ID
    end


Dit werkt!

Verwijderd

"trNulWordtEen"

Nou, over wat de trigger doet is weinig discussie mogelijk haha ;)

[ Voor 0% gewijzigd door Verwijderd op 12-08-2002 16:57 . Reden: 'wordt' verandert in 'doet' |:( ]


Verwijderd

Topicstarter
Duidelijkheid voor alles hè...

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Wat voor Exact licentie hebben jullie? Als jullie ook met voorraden (E-Voorraad) werken, kun je hiermee de voorraadgegevens nogal om zeep helpen :)

Exact expert nodig?


Verwijderd

Topicstarter
Wees niet bang Crazy_D, het gaat om tekstartikelen, niet om voorraad artikelen.

Maar toch bedankt voor de oplettendheid!

Het ging om een 'foutje' in Exact Globe voor Windows, die bij het afdrukken van een pakbon de orderregels met aantal nul niet naar orderhistorie wegschrijft. Aangezien we op basis van de orderhistorie maatwerksoftware hebben geschreven was het van enorm belang om alle gegevens in de orderhistorie te krijgen!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Als het om tekst artikelen gaat zou ik voor de zekerheid er nog even een checkje bijzetten o ar_soort (ff uit mn hoofd hoor, maar ik dacht dat ar_soort = 'T' = tekstartikel).

zout bugje trouwens ;)

Exact expert nodig?


Verwijderd

Topicstarter
Dat is op zich een goed idee. Het type product dat deze klant maakt, maakt het eigenlijk onmogelijk om één stuks te leveren van hun 'echte' artikelen, dus een pakbon met die hoeveelheden zou nooit de deur uitgaan, maar je weet tenslotte maar nooit, het blijven eindgebruikers hè ;)

Heel naar bugje, aangezien het in Exact voor Windows niet zo werkte... Exact liet ons weten dat ze het wel op konden lossen voor mucho Eurotjes. Fijn!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Verwijderd schreef op 13 augustus 2002 @ 13:34:
Heel naar bugje, aangezien het in Exact voor Windows niet zo werkte... Exact liet ons weten dat ze het wel op konden lossen voor mucho Eurotjes. Fijn!
|:( kunnen jullie lekker voor de bugfixing betalen, wel slim trouwens ;).... of het door E-Maatwerk laten doen voor erg veel € ;)
misschien gaat dit wel wat offtopic :D

Exact expert nodig?


Verwijderd

Topicstarter
Gelukkig is het met de komst van SQL-server in Exact veel makkelijker geworden om zelf de controle terug te pakken!

Misschien maar eens een topic met als titel: !@#$%^&*Exact!@#$%^&* om dit verder in te bespreken.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

:D Ik denk dat er hier te weinig mensen echt op bestands niveau met Exact werken (wees blij :P).
Ik zit er eigenlijk alleen op te wachten dat ze bij updates de db controlleren, en stored procs en triggers ed die niet van hun zijn, eruit gooien ;)

Exact expert nodig?

Pagina: 1