Táto stránka pre svoju správnu funkčnosť vyžaduje súbory cookies. Slúžia na authentifikáciu návštevníka, analýzu návštevnosti a reklamnú personalizáciu.
logo Knowledge base KB
mobile

Duplikácia dát vo výsledku podľa parametra

Duplicity záznamov v SELECTe sú väčšinou nežiadúcim javom, avšak nájdu sa situácie, kedy sú potrebné. Napríklad ak je výsledok použitý ako zdroj dát pre tlačovú zostavu lepiacich štítkov a niektoré špecifické riadky je potrebné vytlačiť viac krát (napríklad na lepiaci štítok sériového čísla výrobku, štítok na krabicu, záručný list, či kontrolný zoznam).

Na samotnú duplikáciu využijeme tabuľku, ktorá bude obsahovať potrebný počet riadkov a pripojíme ju k našim dátam bez udania podmienky na prepojenie. Samotná duplikačná tabuľka bude dynamicky generovaná cez stored funkciu, ktorá bude ako parameter prijímať počet požadovaných kópii.

Stored funkcia:

Zdrojový kód:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION Multiplier
(     
     @MultipleCount INT
)
RETURNS @Result TABLE (Number INT)
AS
BEGIN

     DECLARE @Counter INT
     SET @Counter = 1

     IF (@MultipleCount > 0)
     BEGIN

          WHILE (@Counter <= @MultipleCount)
          BEGIN
               INSERT INTO @Result (Number) VALUES (@Counter)

               SET @Counter = @Counter + 1
          END
     END

RETURN

END
GO

Použitie funkcie:

Zdrojový kód:
/*Pozadovany pocet kopii*/
DECLARE @Copies INT
SET @Copies = 5

/*Testovacie data*/
SELECT 'Table' AS ItemName, '123456001' AS BarCode INTO #tmp
UNION ALL
SELECT 'Mouse' AS ItemName, '123456002' AS BarCode
UNION ALL
SELECT 'Keyboard' AS ItemName, '123456003' AS BarCode
UNION ALL
SELECT 'Monitor' AS ItemName, '123456004' AS BarCode

SELECT a.*, b.Number
FROM #tmp a, Multiplier(@Copies) b
ORDER BY a.ItemName, b.Number

DROP TABLE #tmp

Keywords: MS SQL, SELECT, DUPLICATE

Codeblog