Ik heb een table met verschillende magazijns en modellen. Telkens als er wat in of uit een magazijn gaat wordt dat in de tabel als een record toegevoegd. als er iets binnenkomt, dan is binnen een datum en is uit NULL en als er iets uit gaat andersom. Alle modellen hebben ook nog een kleurnummer en een combinatienummer.
Nu is het mogelijk dat het zelfde model verschillende keren is binnen gekomen op 1 plaats en ook wel er uit is gegaan.
Het is de bedoeling dat ik weergeef hoeveel van de verschillende modellen op dit moment aanwezig zijn in welk magazijn.
Daarvoor heb ik een SP gemaakt, die een tablevariable maakt met van alle verschillende modellen per magazijn het totaal. Hij werkt met verschillende cursors die ik genest heb (misschien dat hier t probleem zit?).
Het probleem is namelijk dat mn tablevariable leeg blijft. In t executionplan heb ik gezien, dat alleen de eerste cursor rows returned, dus, alle andere cursors worden doordat ik WHILE @@FETCH_STATUS = 0 gebruik, niet geopend en mn INSERT statement wordt niet bereikt.
Ik heb er eens over nagedacht, alleen ik zou geen alternatief SET-Based solution weten.
Kan iemand mij vertellen waar de fout in mijn code zit? Ik heb hem nagelopen, uitgevoerd en dingen nagezocht in de SQLsvr 2k bible en gezocht in t forum.
Nu is het mogelijk dat het zelfde model verschillende keren is binnen gekomen op 1 plaats en ook wel er uit is gegaan.
Het is de bedoeling dat ik weergeef hoeveel van de verschillende modellen op dit moment aanwezig zijn in welk magazijn.
Daarvoor heb ik een SP gemaakt, die een tablevariable maakt met van alle verschillende modellen per magazijn het totaal. Hij werkt met verschillende cursors die ik genest heb (misschien dat hier t probleem zit?).
Het probleem is namelijk dat mn tablevariable leeg blijft. In t executionplan heb ik gezien, dat alleen de eerste cursor rows returned, dus, alle andere cursors worden doordat ik WHILE @@FETCH_STATUS = 0 gebruik, niet geopend en mn INSERT statement wordt niet bereikt.
Ik heb er eens over nagedacht, alleen ik zou geen alternatief SET-Based solution weten.
Kan iemand mij vertellen waar de fout in mijn code zit? Ik heb hem nagelopen, uitgevoerd en dingen nagezocht in de SQLsvr 2k bible en gezocht in t forum.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| DECLARE @magazijn NVARCHAR(50), @inkoopnr INT, @combi NCHAR, @kleurnr INT, @bekledingnr INT, @totaal INT
DECLARE cMagazijn CURSOR FOR SELECT DISTINCT magazijn FROM voorraad
DECLARE cModel CURSOR FOR SELECT DISTINCT inkoopnr FROM voorraad WHERE magazijn='@magazijn'
DECLARE cCombi CURSOR FOR SELECT DISTINCT modelnr FROM voorraad WHERE magazijn='@magazijn' AND inkoopnr=@inkoopnr
DECLARE cKleur CURSOR FOR SELECT DISTINCT kleurnr FROM voorraad WHERE magazijn='@magazijn' AND inkoopnr=@inkoopnr AND modelnr='@combi'
DECLARE cBekleding CURSOR FOR SELECT DISTINCT bekledingnr FROM voorraad WHERE magazijn='@magazijn' AND inkoopnr=@inkoopnr AND modelnr='@combi' AND kleurnr=@kleurnr
DECLARE @voorraad TABLE (
[ID] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
Magazijn NVARCHAR(50),
Inkoopnr INT,
Model NCHAR,
Bekledingnr INT,
Kleurnr INT,
Aantal INT)
OPEN cMagazijn
FETCH cMagazijn INTO @magazijn
WHILE @@Fetch_Status = 0
BEGIN
OPEN cModel
FETCH cModel INTO @inkoopnr
WHILE @@Fetch_Status = 0
BEGIN
OPEN cCombi
FETCH cCombi INTO @combi
WHILE @@Fetch_Status = 0
BEGIN
OPEN cKleur
FETCH cKleur INTO @kleurnr
WHILE @@Fetch_Status = 0
BEGIN
OPEN cBekleding
FETCH cBekleding INTO @bekledingnr
WHILE @@Fetch_Status = 0
BEGIN
SELECT @totaal = SUM(aantal) FROM voorraad WHERE magazijn=@magazijn AND inkoopnr=@inkoopnr AND modelnr=@combi AND kleurnr=@kleurnr AND bekledingnr=@bekledingnr AND binnen IS NOT NULL
SELECT @totaal = @totaal - SUM(aantal) FROM voorraad WHERE magazijn=@magazijn AND inkoopnr=@inkoopnr AND modelnr=@combi AND kleurnr=@kleurnr AND bekledingnr=@bekledingnr AND uit IS NOT NULL
INSERT INTO @voorraad(magazijn, inkoopnr, Model, bekledingnr, kleurnr, aantal) VALUES(@magazijn, @inkoopnr, @combi, @bekledingnr, @kleurnr, @totaal)
FETCH cBekleding INTO @bekledingnr
END
CLOSE cBekleding
FETCH cKleur INTO @kleurnr
END
CLOSE cKleur
FETCH cCombi INTO @combi
END
CLOSE cCombi
FETCH cModel INTO @inkoopnr
END
CLOSE cModel
FETCH cMagazijn INTO @magazijn
END
CLOSE cMagazijn
DEALLOCATE cMagazijn
DEALLOCATE cKleur
DEALLOCATE cCombi
DEALLOCATE cBekleding
DEALLOCATE cModel
SELECT * FROM @voorraad |