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
ENDRETURNEND
GO
Použitie funkcie: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
ENDRETURNEND
GO
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 BarCodeSELECT a.*, b.Number
FROM #tmp a, Multiplier(@Copies) b
ORDER BY a.ItemName, b.NumberDROP TABLE #tmp
Keywords: MS SQL, SELECT, DUPLICATE
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 BarCodeSELECT a.*, b.Number
FROM #tmp a, Multiplier(@Copies) b
ORDER BY a.ItemName, b.NumberDROP TABLE #tmp