/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Problem med trigger
Fra : Steen Andreassen


Dato : 03-08-04 17:04

Hejsa Nyhedsgruppe....
Jeg er kørt helt fast mht. at lave en Insert-trigger på tabellen:
"tbl_netyper_idrift" som ses herunder.

/* Denne tabel viser hvor mange enheder af en given type der er idrift */
CREATE TABLE [dbo].[tbl_netyper_idrift] (
[neTypeID] [smallint] NOT NULL ,
[dato] [datetime] NOT NULL ,
[antal] [smallint] NOT NULL
) ON [PRIMARY]

Typisk dataindhold i tbl_netyper_idrift:
1, 13-07-2003, 5
1, 13-10-2003, 17
2, 15-07-2003, 5

/* Næste tabel angiver hvordan en given enhed er bestykket med printkort*/
CREATE TABLE [dbo].[tbl_bestykning] (
[neTypeID] [smallint] NOT NULL ,
[enhedsID] [smallint] NOT NULL ,
[initialBestykning] [tinyint] NULL ,
[maxBestykning] [smallint] NULL
) ON [PRIMARY]

Typisk dataindhold i tabellen tbl_bestykning:
1, 12, 1, 5
1, 14, 1, 5
1, 27, 3, 4
2, 12, 1, 5
2, 13, 2, 7



/* Denne tabel viser samtlige printkorttyper der er i drift
sammen med antallet af kort */
CREATE TABLE [dbo].[tbl_enheder_idrift] (
[enhedsID] [smallint] NOT NULL ,
[dato] [datetime] NOT NULL ,
[antal] [smallint] NOT NULL
) ON [PRIMARY]




Jeg har brug for, at der i tabellen: tbl_enheder_idrift indsættes følgende
hver gang der bliver indsat en ny record i tabellen: tbl_netyper_idrift:

enhedsID fra tbl_bestykning,
dato (Bliver autogenereret)
antal = tbl_netyper_idrift.antal * tbl_bestykning.initialBestykning

Mit problem er, at skal have "Inserted" flere rækker i tbl_enheder_idrift
som følger af, at en given enhed (NeTypeId) har flere rækker i
tbl_bestykning, som følger af, at en enhed er bestykket med flere printkort.

Hvordan løser jeg dette ?

MVH
Steen



 
 
Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 19:21

"Steen Andreassen" wrote

> Mit problem er, at skal have "Inserted" flere rækker i
tbl_enheder_idrift
> som følger af, at en given enhed (NeTypeId) har flere rækker i
> tbl_bestykning, som følger af, at en enhed er bestykket med flere
printkort.
>
> Hvordan løser jeg dette ?
>
Egentlig burde du lave dit design om, da du får redundante data en masse

Man kan snildt indsætte flere række fra een tabel til en anden i samme
statement
Hvilket rdbms bruger du?

- Peter



Steen Andreassen (03-08-2004)
Kommentar
Fra : Steen Andreassen


Dato : 03-08-04 19:35

Hejsa Peter....

Jeg bruger SQL-2000

Du skriver: "Egentlig burde du lave dit design om, da du får redundante data
en masse".
Det er med fuldt overlæg, idet der senere skal køres statistik & historik på
dataene bla. for at udregne den aktuelle MTBF værdi, således at leverandøren
kan holdes op på det, hvis ikke udstyret lever op til de opgivne
specifikationer mht. fejlhyppighed.

MVH
Steen
..
"Peter Lykkegaard" <polonline@hotmail.com> wrote in message
news:410fd7d5$0$223$edfadb0f@dread14.news.tele.dk...
> "Steen Andreassen" wrote
>
> > Mit problem er, at skal have "Inserted" flere rækker i
> tbl_enheder_idrift
> > som følger af, at en given enhed (NeTypeId) har flere rækker i
> > tbl_bestykning, som følger af, at en enhed er bestykket med flere
> printkort.
> >
> > Hvordan løser jeg dette ?
> >
> Egentlig burde du lave dit design om, da du får redundante data en masse
>
> Man kan snildt indsætte flere række fra een tabel til en anden i samme
> statement
> Hvilket rdbms bruger du?
>
> - Peter
>
>



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 19:46

"Steen Andreassen" wrote

> Jeg bruger SQL-2000
>
Ok, du kan evt kikke i BOL (Books Online) for syntaks etc for Insert
statements

Du kan lave en konstruktion ala

INSERT INTO new_authors
SELECT TOP 10 * from authors

Såvidt jeg lige husker så skal du have de rigtige feltnavne placeret de
rigtige steder i din Select statement - og så spiller det

- Peter



Steen Andreassen (03-08-2004)
Kommentar
Fra : Steen Andreassen


Dato : 03-08-04 20:10

Hej igen Peter.....

Jeg har skam pløjet Books Online, samt internettet igennem, men har ikke
fundet noget brugbart.
Selve select- og insert- sætningerne er som sådan ikke noget problem.
Problemet er at få det "Klistret" sammen.

Mit problem er, at der findes flere linier for en given netypeid i
tbl_bestykning-tabellen.
Derudover skal jeg have lavet multiplikationen inden det indsættes i den
ønskede tabel.

MVH
Steen


"Peter Lykkegaard" <polonline@hotmail.com> wrote in message
news:410fddaa$0$230$edfadb0f@dread14.news.tele.dk...
> "Steen Andreassen" wrote
>
> > Jeg bruger SQL-2000
> >
> Ok, du kan evt kikke i BOL (Books Online) for syntaks etc for Insert
> statements
>
> Du kan lave en konstruktion ala
>
> INSERT INTO new_authors
> SELECT TOP 10 * from authors
>
> Såvidt jeg lige husker så skal du have de rigtige feltnavne placeret de
> rigtige steder i din Select statement - og så spiller det
>
> - Peter
>
>



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 20:51

"Steen Andreassen" wrote
>
> Selve select- og insert- sætningerne er som sådan ikke noget problem.
> Problemet er at få det "Klistret" sammen.
>
Damn, du vil gerne have at jeg skal lave noget

Vender tilbage senere/ - Peter



Steen Andreassen (03-08-2004)
Kommentar
Fra : Steen Andreassen


Dato : 03-08-04 21:20

Hej igen Peter.....

Jeg bladede atter igennem min udmærkede bog om Stored Procedures, og faldt
over "Cursors".
Jeg skal lige have læst noget mere teori om disse, men er sikker på at det
er løsningen.

Men hvis det skulle komme over dig, og du får lyst til "At Lave noget" vil
jeg da være taknemmelig over et input

MVH
Steen

"Peter Lykkegaard" <polonline@hotmail.com> wrote in message
news:410fecce$0$239$edfadb0f@dread14.news.tele.dk...
> "Steen Andreassen" wrote
> >
> > Selve select- og insert- sætningerne er som sådan ikke noget problem.
> > Problemet er at få det "Klistret" sammen.
> >
> Damn, du vil gerne have at jeg skal lave noget
>
> Vender tilbage senere/ - Peter
>
>



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 22:17

"Steen Andreassen" wrote

> Jeg bladede atter igennem min udmærkede bog om Stored Procedures, og
faldt
> over "Cursors".
> Jeg skal lige have læst noget mere teori om disse, men er sikker på at
det
> er løsningen.

Det ville være noget skrammel at lave en insert trigger med en cursor
imho

- Peter



Kristian Damm Jensen (04-08-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 04-08-04 07:08

"Peter Lykkegaard" <polonline@hotmail.com> wrote in message news:<411000f7$0$260$edfadb0f@dread14.news.tele.dk>...
> "Steen Andreassen" wrote
>
> > Jeg bladede atter igennem min udmærkede bog om Stored Procedures, og
> faldt
> > over "Cursors".
> > Jeg skal lige have læst noget mere teori om disse, men er sikker på at
> det
> > er løsningen.
>
> Det ville være noget skrammel at lave en insert trigger med en cursor
> imho

Hvorfor dog det?

Man skal naturligvis ikke lave en cursor, hvis man ikke har et behov
(og man har ikke et behov, hvis det samme kan udtrykkes rimelig
fornuftigt gennem en serie almindelige sql-sætninger). Men
valideringer og kaskadeopdateringer kan sagtens være så komplekse at
det ikke er overskueligt (eller muligt, for den sags skyld) bare at
lave dem med enkelte sql-sætninger. Hos os er det ikke ualmindeligt,
at triggeren kalder en procedure for at få udført en del af arbejdet.

VH
Kristian

>
> - Peter

Steen Andreassen (04-08-2004)
Kommentar
Fra : Steen Andreassen


Dato : 04-08-04 07:57

Hi guys.....

Øøøvv. Da jeg lærte om Cursors, på SQL-programmeringskurset, kunne jeg
overhovedet ikke se anvendeligheden, men nu havde jeg ellers lige set lyset
mht. anvendelse af cursors, og så skyder i bare det hele ned.

Men efter at have set jeres forslag, er jeg enig i, at det kan gøres uden
cursors.

Jeg har arbejdet videre med det i foreslog, og den endelige trigger er vist
her nedenunder.

Jeg takker mange gange for hjælpen, idet jeg var kommet ret langt ud mht.
mine ideer til en SQL-sætning efter at have rodet med det det meste af en
arbejdsdag.

Mvh.
Steen

CREATE TRIGGER trg_insertEnhederIdrift ON [dbo].[tbl_netyper_idrift]
FOR INSERT
AS

INSERT INTO tbl_enheder_idrift(
enhedsID,
dato,
antal)
SELECT t1.enhedsID,
t2.dato,
t2.antal * t1.initialbestykning
FROM tbl_netyper_idrift t2
INNER JOIN tbl_bestykning t1
ON t2.netypeid = t1.netypeid
WHERE t1.initialbestykning IS NOT NULL
AND t2.dato = (SELECT MAX(dato) FROM tbl_netyper_idrift t2_2
WHERE t2.netypeid = t2_2.netypeid)




Peter Lykkegaard (04-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 04-08-04 08:28

"Kristian Damm Jensen" wrote

> "Peter Lykkegaard" wrote

> > Det ville være noget skrammel at lave en insert trigger med en
cursor
> > imho
>
> Hvorfor dog det?
>
Argh, jeg skulle nok have skrevet at det var i forhold til den nævnte
situation

- Peter



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 22:42

"Steen Andreassen"

> Jeg har brug for, at der i tabellen: tbl_enheder_idrift indsættes
følgende
> hver gang der bliver indsat en ny record i tabellen:
tbl_netyper_idrift:
>
> enhedsID fra tbl_bestykning,
> dato (Bliver autogenereret)
> antal = tbl_netyper_idrift.antal * tbl_bestykning.initialBestykning
>
Hmm, der er da noget galt mht referencer etc?

Laver jeg en select således

select
enhedsid,
d.antal,
b.maxbestykning,
d.antal * b.maxbestykning as antal
from tbl_netyper_idrift d
inner join tbl_bestykning b
on d.netypeid = b.netypeid
where d.netypeid = 1

Så får jeg dette resultat:

enhedsid antal maxbestykning antal
-------- ------ ------------- ------
12 5 5 25
14 5 5 25
27 5 4 20
12 17 5 85
14 17 5 85
27 17 4 68

Er det korrekt?

- Peter



Søg
Reklame
Statistik
Spørgsmål : 177460
Tips : 31964
Nyheder : 719565
Indlæg : 6408201
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste