Když mám delší uloženou proceduru, špatně se v ní orientuje. Potřebuji oddělit jednotlivé části a hlavně mít možnost sbalit konkrétní části.
Chci si napsat vzorový kód s komentáři, který by byl přehledný a dobře se dal balit. Především v management studiu ale i třeba v DBeaver.
Takto vypadá kód před sbalením. Sbalení se dělá díky tomu BEGIN END.
Management studio umožňuje vyznačit část kódu a sbalit ho. Stačí si do toolbaru přidat „Hide Selection“. Jenže to platí jen dokud nezavřu a neotevřu.
kód pro nakopírování do management studia:
---- Celý blok má zkratku (FV,REZ).
-- Podčásti pak FV1, FV2, FV3
-- Používám standardně 10 znaků pro *
-- To BEGIN END umožňuje sbalit.
-- Na plus je nutno kliknout někdy dvakrát
--********** FV Naplnění FV do mojí tabulky **********
-- Chci načíst FV fdo mojí tabulky
-- Jedu přes TMP tabulku, protože potřebuji nějaké úpravy
-- Taky nechci zatěžoat/zamykat vstupní systém.
-- Datum má index
-- Trvá cca 0:30
if 1=1 BEGIN
--********** FV1 nejprve do TMP
drop table if exists #fv
select -- 570 000 0:15
h.cislo as Cislo
,p.SKU as SKU
,h.Sklad as Sklad
,isnull(p.Cena,0) as Cena
,p.Mj as Mj
into #fv
-- select count(*) -- 54 410
from dbo.faktura_hlavicka h
join dbo.faktura_polozka p on h.ID = p.ID
where 1=1
and h.datum >= '2022-01-01'
-- select top 100 * from #fv where SKU = 743504 --743504 = OM0018
--********** FV2 kontrola nulové FV
-- pokud je nulová FV, je to chyba na které přeruším zpracování
declare @ChybaNulovaFV varchar(max)
set @ChybaNulovaFV = 'Existuje FV s nulovou částkou! První nalezená FV má číslo:' +
(select top 1 convert(varchar(200),Cislo)
from #fv
where 1=1
and isnull(Cena,0) = 0
)
if @ChybaNulovaFV is not null
begin
RAISERROR(@ChybaNulovaFV, 18, 1)
return
end
--********** FV3 strčím do své tabulky
Insert into MojeTabulka (Cislo, SKU, Cena)
select
fv.Cislo
,fv.SKU
,sum(fv.Cena) as Cena --nemůže býrt null
from #fv fv
group by
fv.Cislo
,fv.SKU
END --Konec FV
--********** REZ Naplnění rezervací **********
-- Tady je další oddíl
if 1=1 BEGIN
--********** REZ1 něco dělám
Select getdate()
END --Konec REZ
Pomocný kód který vytvoří tabulky.
-- drop table if exists dbo.faktura_hlavicka
Create table dbo.faktura_hlavicka (
ID int NULL
,cislo varchar(30) NULL
,sklad int NULL
,datum datetime
)
-- drop table if exists dbo.faktura_polozka
Create table dbo.faktura_polozka (
ID int NULL
,SKU INT NULL
,Mj INT NULL
,Cena money NULL
)
-- drop table if exists dbo.MojeTabulka
Create table dbo.MojeTabulka (
Cislo int NULL
,SKU INT NULL
,Cena money NULL
)
Napsat komentář
Pro přidávání komentářů se musíte nejdříve přihlásit.