CREATE TABLE faktura( id_faktura INT NOT NULL IDENTITY(1,1), cislo NVARCHAR(50) NOT NULL, CONSTRAINT pk_faktura PRIMARY KEY CLUSTERED (id_faktura) ) GO CREATE TABLE polozka( id_polozka INT NOT NULL IDENTITY(1,1), id_faktura INT NOT NULL, zbozi NVARCHAR(50) NOT NULL, mnozstvi INT NOT NULL, cena NUMERIC(10,2) NOT NULL, CONSTRAINT pk_polozka PRIMARY KEY CLUSTERED (id_polozka), CONSTRAINT fk_polozka_faktura FOREIGN KEY (id_faktura) REFERENCES faktura(id_faktura) ) GO INSERT INTO faktura(cislo) VALUES('2021001'),('2021002') INSERT INTO polozka(id_faktura, zbozi, mnozstvi, cena) VALUES (1,'chleba',5,100), (1,'rohlik',5,10), (2,'cukr',1,10), (2,'olej',2,50) GO CREATE TYPE tt_polozka AS TABLE( zbozi NVARCHAR(50) NOT NULL, mnozstvi INT NOT NULL, cena NUMERIC(10,2) NOT NULL ) GO CREATE PROCEDURE p_aktualizuj_polozky_faktury @id_faktura INT, @polozky tt_polozka READONLY AS BEGIN MERGE INTO polozka p USING ( SELECT f.id_faktura, p.zbozi, p.mnozstvi, p.cena FROM faktura f CROSS JOIN @polozky p WHERE f.id_faktura = @id_faktura )zdroj ON zdroj.id_faktura = p.id_faktura AND zdroj.zbozi = p.zbozi WHEN MATCHED THEN UPDATE SET p.mnozstvi = zdroj.mnozstvi, p.cena = zdroj.cena WHEN NOT MATCHED THEN INSERT(id_faktura, zbozi, mnozstvi, cena) VALUES(zdroj.id_faktura, zdroj.zbozi, zdroj.mnozstvi, zdroj.cena) WHEN NOT MATCHED BY SOURCE AND p.id_faktura = @id_faktura THEN DELETE; END GO DECLARE @polozky tt_polozka INSERT INTO @polozky VALUES('cukr',5,50),('pivo',10,200); SELECT * FROM faktura f JOIN polozka p ON f.id_faktura = p.id_faktura EXEC p_aktualizuj_polozky_faktury @id_faktura = 2, @polozky = @polozky SELECT * FROM faktura f JOIN polozka p ON f.id_faktura = p.id_faktura GO
id_faktura cislo id_polozka id_faktura zbozi mnozstvi cena ----------- -------------------------------------------------- ----------- ----------- -------------------------------------------------- ----------- --------------------------------------- 1 2021001 1 1 chleba 5 100.00 1 2021001 2 1 rohlik 5 10.00 2 2021002 3 2 cukr 1 10.00 2 2021002 4 2 olej 2 50.00 id_faktura cislo id_polozka id_faktura zbozi mnozstvi cena ----------- -------------------------------------------------- ----------- ----------- -------------------------------------------------- ----------- --------------------------------------- 1 2021001 1 1 chleba 5 100.00 1 2021001 2 1 rohlik 5 10.00 2 2021002 3 2 cukr 5 50.00 2 2021002 5 2 pivo 10 200.00