Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
64
Rozdział2:RozszerzeniajęzykaT-SQL
LISTING2-2Tworzenieproceduryskładowanejakceptującejparametrytablicowe
CREATEPROCEDUREuspInsertNewOrder
(@OrderTvpASOrderUdtREADONLY,
@OrderDetailsTvpASOrderDetailUdtREADONLY)
AS
INSERTINTO[Order]
SELECT*FROM@OrderTvp
INSERTINTO[OrderDetail]
SELECT*FROM@OrderDetailsTvp
Jakwidać,pokazanypowyżejkodwstawiadanepochodzącezdwóchparametrów
tablicowych,bezpośredniodotabelOrderiOrderDetail.Zasadniczo,zamiastwsta-
wianiapojedynczychwierszyprzyużyciuwieluwywołańumieszczonychwjednej
transakcji,kodtenwykonujeoperacjęmasowegowstawianiadanych,używająctylko
jednegowywołania.
Przyjrzymysięterazmożliwościommasowegowstawianiadanych,oferowanym
przezparametrytablicoweorazsposobomtworzenie,deklarowania,wypełnianiadany-
miiprzekazywaniaparametrówtablicowychwjęzykuT-SQL.Następniezademonstru-
jemysposóbzapełnianiadanymiparametrówtablicowychiprzekazywaniaichpoprzez
siećprzyużyciuskładnikaADO.NET,zaplikacjiklientanapisanejwjęzykuplatformy
.NETdoproceduryskładowanejwjęzykuT-SQL.
Używanieparametrówtablicowychdomasowych
operacjiwstawianiaiaktualizowaniadanych
Pokażemyterazprzykładproceduryskładowanej,którąmożnautworzyćwbazie
danychAdventureWorks2012.Procedurataakceptujejedenparametrtablicowyiwsta-
wiawszystkieprzekazanejejwierszedotabeliProduct.Location.Dziękiutworzeniuzde-
finiowanegoprzezużytkownikatablicowegotypudanychonazwieLocationUdt,opi-
sującegoschematwszystkichwierszyprzekazywanychdotejproceduryskładowanej,
proceduratabędziemogłabyćwywoływanazpoziomudowolnegokodu,którybędzie
mógłprzekazywaćdoniejzapomocąpojedynczegoparametrutypuLocationUdtgoto-
wyzbiórwierszyprzeznaczonychdowstawieniadotabeliProduct.Location.
Najpierwutworzymywięczdefiniowanyprzezużytkownikatablicowytypdanych
onazwieLocationUdt,takjaktozostałopokazanewlistingu2-3.
LISTING2-3TworzenietablicowegotypudanychLocationUd,przeznaczonegodowykonywania
masowychoperacjinadanychprzekazywanychwparametrachtablicowych
CREATETYPELocationUdtASTABLE(
LocationNamevarchar(50),
CostRateint)