Pomoću jezika T-SQL možete da ažurirate podatke, da ih upisujete u tabele i da ih uklanjate iz tabela Upite koje smo do sada videli su upiti SELECT. To znači da se pomoću tih upita podaci izdvajaju iz jedne ili više tabela. Upiti koje ćete sada videti su akcioni upiti (action Query). To su upiti pomoću kojih se menjaju podaci, to su: INSERT, UPDATE, SELECT INTO, DELETE, TRUNCATE, MERGE proces i OUTPUT klauzula.
Iskaz INSERT koristite za upisivanje podataka u postojeću tabelu. Sintaksa iskaza INSERT je:
INSERT [INTO] table [(col1, col2...)] VALUES (value1, value2)
Primer:
INSERT INTO SalesLT.ProductCategory
(ParentProductCategoryID
, Name, rowguid,ModifiedDate)
VALUES ( 4,
'Student', '3C17C9AE-D906-48B4-BDD3-60E28D46DCDF',
'1998-06-01 00:00:00.000')
U primeru se zadate vrednosti upisuju u zadata polja tabele SalesLT.ProductCategory.
Iskaz SELECT INTO
Iskaz INSERT se koristi za upisivanje podataka u postojeću tabelu, a iskaz SELECT into se koristi za pravljenje nove tabele.
Primer:
SELECT ProductID
, Name
, ProductNumber
, Color
, StandardCost
, ListPrice
, Size
, Weight
, ProductCategoryID
, ProductModelID
, SellStartDate
, SellEndDate
, DiscontinuedDate
, ThumbNailPhoto
, ThumbnailPhotoFileName
, rowguid
, ModifiedDate
INTO SalesLT.Product_pom FROM SalesLT.Product
where ProductNumber = 'FR-R92B-58'
Svi proizvodi čiji je ProductNumber 'FR-R92B-58' se prebacuju u tabelu SalesLT.Product_pom.
Ažuriranje podataka pomoću iskaza UPDATE
Pomoću iskaza UPDATE se ažuriraju podaci tabele. Iskaz UPDATE ima sledeću definiciju:
UPDATE tabela set column1 = value1, [column2=value2 ... ,]
Primer:
UPDATE SalesLT.Product_pom
SET ListPrice = '1431.90'
where ProductNumber = 'FR-R92B-58'
Ažurira se tabela SalesLT.Product_pom, svim redovima gde je ProductNumber = 'FR-R92B-58' menja ListPrice u '1431.90'
Uklanjanje podataka pomoću iskaza DELETE [FROM] tabela [WHERE uslov]
Primer:
DELETE FROM SalesLT.Product_pom
WHERE ProductID = 680
Iskaz DELETE se koristi za uklanjanje redova iz tabele.
Definicija je:
DELETE [ FROM] table-name [WHERE uslov]
Iskaz TRUNCATE
Iskaz obriše sve redove iz tabele.
Definicija:
TRUNCATE table SalesLT.Product_pom
Iskaz Merge
Pomoću Iskaza Merge se obezbeđuje izvršavanje svih odgovarajućih operacija unosa, ažuriranja i uklanjanja vezanih za tabelu, na osnovu podataka u spojenim tabelama. Ova tehnika obezbeđuje konzistentnost podataka, kao i integritet podataka. Rezultat izvršavanja naredbe je takav da se promene iz jedne odredišne tabele spajaju sa izvornom tabelom.
Sintaksa je:
MERGE <target>
USING
(select <expression> FROM <source> as <alias>
ON <intersection>
WHEN MATCHED
THEN <UPDATE | DELETE >
WHEN TARGET NOT MATCHED [AND <condition >]
THEN <INSERT>
WHEN SOURCE NOT MATCHED [AND <condition >]
THEN <UPDATE | DELETE >[;]
Primer:
CREATE TABLE LIST_STUDENT1
(
RBR int,
Val varchar(20)
);
CREATE TABLE LIST_STUDENT2
(
RBR int,
Val varchar(20)
);
INSERT INTO LIST_STUDENT1
values (1, 'Student1'),
(2, 'Student2'),
(3, 'Student3');
INSERT INTO LIST_STU2
values (1, 'NAJ_Uspesniji_Stud'),
(4, 'StudentNN');
MERGE LIST_STUDENT1 as target
USING (SELECT * FROM dbo.LIST_STUDENT2)as source
ON source.RBR = target.RBR
WHEN MATCHED
THEN UPDATE SET target.Val=source.Val
WHEN NOT MATCHED
THEN INSERT VALUES (source.RBR, source.Val);
U primeru se pronađena vrsta ažurira i postignuta kozistentnost vrednost podataka između dve tabele u vrstama koje odgovaraju jedna drugoj.
Izvor uopšte ne mora da bude tabela, može da bude izvedena tabela definisana SQL naredbom. Znači moguće je više izmena u odredišnoj tabeli pomoću jedne naredbe ako napisan upit prikaže konačan oblik podataka nakon izvršavanja izmena.
OUTPUT klauzula
Output klauzula omogućava da smestite željene vrednosti u tabeli koja je rezidentna u memoriji, nije permanentni deo strukture tabela i izvršavaju se samo onda kada to od njih zahtevate.
Primer:
use Northwind
set IDENTITY_INSERT Naziv_tabele on;
GODECLARE @InsertedData table
(
kolona1 tip_podataka,
kolona2 tip_podataka
);
INSERT INTO Naziv_tabele(Kolona1, kolona2....kolona99)
OUTPUT INSERTED.kolona1, INSERTED.kolona1
INTO @InsertedData
SELECT kol1, kol2... kol99
from tabela;
select * from @InsertedData;
SET IDENTITY_INSERT Naziv_tabele OFF;
go
U primeru se vidi kako se kreira specijalna tabela koja je rezidentna u memoriji i čije su vrednosti definisane vrednostima koje je neophodno uneti. Nakon izvršavanja upita, specijalna tabela se uklanja. Podaci se keširaju u promenljivu u obliku tabele, koja se naziva @InsertedData, vrednosti tabele koristimo u naredbi.