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.
Kód stored funkcie:
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:
/*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