Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Stored procedures

Postades av 2006-08-02 14:26:10 - Markus Bengtsson, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 725 personer

Hej

Jag har ett litet problem
En av våra tabeller (vi kan kalla den artiklar) ser ut ungefär så här

Radnr;ArtikelID,ProduktNamn,Antal

För varje artikel finns det helt enkelt en rad i databasen
Jag skulle vilja skapa en stored procedure som returnerar en tabell där det fanns lika många artikelrader som det aktuella antalet var för just den artikeln (Om jag har flera artiklar så skall även dessa vecklas ut)

Exempel

1;1001A04;"Vinkeljärn";5

då skulle resultatet blir
1;1001A04;"Vinkeljärn";5
2;1001A04;"Vinkeljärn";5
3;1001A04;"Vinkeljärn";5
4;1001A04;"Vinkeljärn";5
5;1001A04;"Vinkeljärn";5


Observera dock att jag inte vill att resultatet skall sparas eller något liknande, det används endast vid rapporthantering nämligen.

Är det någon som har ett förslag eller tips på hur man kan lägga upp detta?

/Markus




Svara

Sv: Stored procedures

Postades av 2006-08-02 16:38:15 - Ola Lindfeldt

Borde vara enklare att lösa i kod/rapportgeneratorn.
Men annars, ett förslag är att du i din SP skapar en temp-tabell

declare @tmp table (radnr int, text varchar(100))

Sen använder du en cursor för att snurra igenom grunddatat och skapar de rader du vill i @tmp tabell
genom att villkora och loopa
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_31yq.asp

sist väljer du resultatet som du skapade i @tmp
( select * from @tmp ..... order by .. )


Svara

Sv: Stored procedures

Postades av 2006-08-03 09:33:10 - Jimmy Thulin

Eller något dylikt (inte testat, men liknande bör fungera):


CREATE PROCEDURE GET_ARTICLE
(
@artID varchar(10)
)
AS

DECLARE @amount int
DECLARE @count int

SET @count = 1
SET @amount = SELECT Antal FROM artiklar WHERE ArtikelID = @artID

WHILE @count <= @amount
BEGIN

    SELECT CAST(@count AS varchar(10)) + ';' + ArtikelID + ';' + ProduktNamn + ';' + CAST(Antal as varchar(10)) FROM Artiklar WHERE ArtikelID = @artID

@count = @count + 1

END


Svara

Sv: Stored procedures

Postades av 2006-08-04 11:03:08 - Markus Bengtsson

Hej
Tack för era inlägg och speciellt länken till MS den var guld värd

så här blev proceduren i alla fall
tyvärr så tar den 60% CPU kraft i ca 1 minut och 40 sekunder
misstänker att det beror på att de två tabellerna är väldigt stora
har dock försökt göra vissa urval som skall minska ned resultatet
om någon av er känner till ett sätt att öka hastigheten mer eller ser något direkt programmeringsmisstag så får ni gärna komma med förslag

/*
	Proceduren utvecklad av Markus Bengtsson
	Skapad 2006-08-03
	Rev:	1.0
	Ändrad av:

	Syfte:
	Procedurens syfte är att hämta selekterade orderrader och att returnera en ny tabell med 
	alla artikelrader utvecklade baserat på antalet beställda artiklar på ordern
*/
CREATE PROCEDURE dbo.sp_label_test 

AS

	DECLARE @label_SalesNumber varchar(10)
	DECLARE @label_QtyOrdered  decimal(28,12)
	DECLARE @label_ItemNumber varchar(20)
	DECLARE @label_Nobbnr varchar(20)
	DECLARE @label_Eannr varchar(20)
	DECLARE @label_Finfonr varchar(20)
	DECLARE @label_ItemName varchar(40)

	DECLARE @tmp TABLE (
                                                 rownumber decimal(28,12), 
                                                 tmp_SalesNumber varchar(10), 
                                                 tmp_QtyOrdered  decimal(28,12), 
                                                 tmp_ItemNumber varchar(20), 
                                                 tmp_Nobbnr varchar(20), 
                                                 tmp_Eannr varchar(20), 
                                                 tmp_Finfonr varchar(20), 
                                                 tmp_ItemName varchar(40))

	SET NOCOUNT ON

	DECLARE label_cursor CURSOR FOR 
	SELECT 
		dbo.SalesTrans.SalesNumber,
		dbo.SalesTrans.QTYORDERED,
		dbo.StockTable.ItemNumber,
		dbo.StockTable.NOBBNR,
		dbo.StockTable.EANNR,
		dbo.StockTable.FINFONR,
		dbo.StockTable.ItemName 
	FROM
		dbo.SalesTrans
		INNER JOIN dbo.StockTable ON
		dbo.Stocktable.DataSet = dbo.SalesTrans.DataSet and
		dbo.StockTable.ItemNumber = dbo.SalesTrans.ItemNumber
	WHERE
		(dbo.SalesTrans.DataSet = 'DOR') AND 
		(dbo.SalesTrans.CreateDate > '2005-01-01 00:00:000') and
		(len(dbo.Stocktable.NOBBNR) > 1 or 
                                 len(dbo.Stocktable.EANNR) >1 or 
                                 len(dbo.Stocktable.FINFONR)>1 )  and
		(dbo.StockTable.PStruct = 0)

	OPEN label_cursor
	FETCH NEXT FROM label_cursor 
	INTO	@label_SalesNumber,
		@label_QtyOrdered, 
		@label_ItemNumber,
		@label_Nobbnr,
		@label_Eannr,
		@label_Finfonr,
		@label_ItemName
	
	DECLARE @counter_2 decimal(28, 12)	
	WHILE @@FETCH_STATUS = 0
	BEGIN
		SET @counter_2 = 1 
		while @counter_2 <= @label_QtyOrdered
		BEGIN
			INSERT INTO @tmp 
			VALUES 
				(@counter_2,
				@label_SalesNumber,
				@label_QtyOrdered, 
				@label_ItemNumber,
				@label_Nobbnr,
				@label_Eannr,
				@label_Finfonr,
				@label_ItemName)
			SET @counter_2 = @counter_2+1
		END
		
		FETCH NEXT FROM label_cursor 
		INTO	@label_SalesNumber,
			@label_QtyOrdered, 
			@label_ItemNumber,
			@label_Nobbnr,
			@label_Eannr,
			@label_Finfonr,
			@label_ItemName

	END

	CLOSE label_cursor
	DEALLOCATE label_cursor
	select * from @tmp

return
GO




mvh

Markus Bengtsson


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
5 791
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies