Spouštění externích akcí nad označenými řádky
Napsal: 23.03.2007 12:39
Spouští-li se externí akce (typu procedura) nad označenými řádky, spouští se pro každý označený řádek jednotlivě – vezme se ID prvního řádku, spustí se procedura, pak se vezme ID druhého řádku, spustí se procedura, atd. (což např. znamená, že nelze použít dočasných – #temporary - tabulek pro uchování informací pro označené řádky a následně spouštět akci pro všechny označené řádky najednou – řešení tohoto problému viz. níže).
Řádky jsou zpracovávány vzestupně dle svého aktuálního třídění v přehledu. Na pořadí označení řádků nezáleží.
Má-li akce Návaznou akci, nejdříve proběhne akce pro všechny označené řádky a až poté proběhne návazná akce (pro všechny označené řádky).
--------------
JE-LI POTŘEBA DÁVKOVĚ ZPRACOVAT VŠECHNY OZNAČENÉ ŘÁDKY (ne jednotlivě, ale naráz), LZE VYUŽÍT NÁSLEDUJÍCÍHO:
Práce s označenými řádky
Počet označených řádků a aktuálně zpracovávaný řádek lze zjistit následovně:
Počet označených řádků pro zpracování:
Číslo zpracovávaného řádku:
Spuštění akce pro označené řádky
Řešení spočívá v uložení potřebných atributů (min. ID) do vlastní tabulky (ne temporary) při každém průchodu a samotnou funkční část procedury spustit až při průchodu posledním řádkem.
Poznámka: Sloupec Ident plněný @@SPID (identifkátor procesu) je nutné použít pro ošetření spouštění akce vícero uživateli najednou.
Řádky jsou zpracovávány vzestupně dle svého aktuálního třídění v přehledu. Na pořadí označení řádků nezáleží.
Má-li akce Návaznou akci, nejdříve proběhne akce pro všechny označené řádky a až poté proběhne návazná akce (pro všechny označené řádky).
--------------
JE-LI POTŘEBA DÁVKOVĚ ZPRACOVAT VŠECHNY OZNAČENÉ ŘÁDKY (ne jednotlivě, ale naráz), LZE VYUŽÍT NÁSLEDUJÍCÍHO:
Práce s označenými řádky
Počet označených řádků a aktuálně zpracovávaný řádek lze zjistit následovně:
Počet označených řádků pro zpracování:
- Kód: Vybrat vše
SELECT Cislo FROM #TabExtKomPar WHERE Popis='CELKEM'
Číslo zpracovávaného řádku:
- Kód: Vybrat vše
SELECT MAX(Cislo) FROM #TabExtKomPar WHERE Popis='PRECHOD'
Spuštění akce pro označené řádky
Řešení spočívá v uložení potřebných atributů (min. ID) do vlastní tabulky (ne temporary) při každém průchodu a samotnou funkční část procedury spustit až při průchodu posledním řádkem.
- Kód: Vybrat vše
DECLARE @Oznacenych SMALLINT, @Aktualni SMALLINT
-- Počet řádků a aktuálně zpracovávaný řádek načteme do proměnných
SELECT @Oznacenych = Cislo FROM #TabExtKomPar WHERE Popis = 'CELKEM'
SELECT @Aktualni = MAX(Cislo) FROM #TabExtKomPar WHERE Popis = 'PRECHOD'
-- Smažeme při prvním průchodu možná existující původní vybrané záznamy
IF @Aktualni = 1 OR (@Aktualni IS NULL AND @Oznacenych IS NULL)
DELETE FROM OznaceneRadky WHERE Ident = @@SPID
-- Při každém průchodu vložíme do tabulky pro označené řádky potřebné atributy
INSERT INTO OznaceneRadky(ID,Ident) VALUES(@ID,@@SPID)
-- Samotné tělo procedury při průchodu posledním záznamem
IF @Aktualni = @Oznacenych OR (@Aktualni IS NULL AND @Oznacenych IS NULL)
BEGIN
...
END
Poznámka: Sloupec Ident plněný @@SPID (identifkátor procesu) je nutné použít pro ošetření spouštění akce vícero uživateli najednou.