Article: AN0001641Updated:
V některých případech je složité získat data pomocí jednoho Select příkazu. Systém ObjectGears umožňuje načíst data i z uložené procedury. Postup je velmi jednoduchý. Stačí vytvořit uloženou proceduru, která splňuje níže popsané předpoklady.
Procedura vytvoří dočasnou tabulku ##tmp, kterou naplní daty. Systém ObjectGears proceduru zavolá, načte záznamy z této tabulky a na závěr tabulku smaže.
Postup vytvoření volání
1. Vytvořte uloženou proceduru, která vytvoří dočasnou tabulku s názvem ##tmp. V proceduře libovolným způsobem získejte výsledná data a naplňte jimi tuto tabulku.
CREATE PROCEDURE procedure_name
AS
BEGIN
create table ##tmp
(
id int,
code varchar(100),
name varchar(100),
[enabled] bit
)
insert into ##tmp
SELECT id, code, name, [enabled] FROM mytable
END
2. V systému ObjectGears vytvořte nový dotaz a do definice SQL dotazu napište následující příkaz, kde procedure_name je název vaší uložené procedury:
exec procedure_name
Předání přihlášeného uživatele do uložené procedury
V dotazu je možné použít proměnnou {{ loginuser.id }}, která při spuštění dotazu vrátí ID přihlášeného uživatele. Tuto hodnotu je možné předat i do uložené procedury. Stejným způsobem je možné předat i jiné parametry.
Pro předání proveďte následující změny:
1) Uložené proceduře přidejte jeden vstupní parametr. Jeho povinnost si určete podle toho, jak jej budete využívat (povinně či nepovinně):
CREATE PROCEDURE procedure_name
@userId int = null
AS
BEGIN
create table ##tmp
(
id int,
code varchar(100),
name varchar(100),
[enabled] bit
)
insert into ##tmp
SELECT id, code, name, [enabled]
FROM mytable
Where @userId is null or ( @userId is not null and @userId = userColumn)
END
2) Do volání uložené procedury přidejte parametr:
exec procedure_name {{ loginuser.id }}