Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Parametryowartościachtablicowych
65
Możemyterazzadeklarowaćzmiennązparametremtablicowymtegotypu,któ-
rybędzieużywanydoprzechowywaniazestawuwierszyzdwiemakolumnami,
LocationNameiCostRate.Wierszetebędąmogłyzostaćużytejakodanewejściowedla
proceduryskładowanej,poprzezprzekazaniedoniejzmiennejzparametremtablico-
wym.Proceduraskładowanabędziewówczasmogłapobieraćdaneztegoparametru
zapomocąinstrukcjiSELECTwtakisamsposóbjakzezwykłejtabelilubwidoku,
używająctegoparametrujakoźródładanychdlainstrukcjiINSERTINTO…SELECT,
dopisującejposzczególnejwierszedotabeliProduct.Location.
WierszedodawanedotabeliProduct.Locationmuszązawieraćwięcejpól,niżtylko
polaznazwąlokalizacjiistawkąkosztów.Tabelatawymagatakżepodaniawarto-
ścidlapoladostępnościorazdatymodyfikacjiwartościtebędąjednakuzupełnia-
neprzeznasząproceduręskładowaną.Podanapowyżejdeklaracjatyputablicowego
definiujeschematokreślającypodzbiórpólwymaganychprzeztabelęProduct.Location
(NameiCostRate),którybędzieużywanydoprzekazywaniawieluwierszydoproce-
duryskładowanej,uzupełniającejwartościpozostałychwymaganychpól(Availability
iModifiedDate).Wprzykładziepokazanymponiżejwlistingu2-4,dlakażdegowiersza
danychpochodzącegozparametrutablicowego(będącegojedynymparametremtej
procedury)idostarczającegowartościdlapólNameiCostRate,wartościpólAvailability
iModifiedDateuzupełnianebędąodpowiedniowartością0orazwartościązwróconą
przezfunkcjęGETDATE.
LISTING2-4Tworzenieproceduryskładowanejprzeznaczonejdomasowegowstawianiadanych
przekazywanychzapomocąparametrutablicowegotypuLocationUdt
CREATEPROCEDUREuspInsertProductionLocation
(@TVPLocationUdtREADONLY)
AS
INSERTINTO[Production].[Location]
([Name],[CostRate],[Availability],[ModifiedDate])
SELECT*,0,GETDATE()FROM@TVP
Mamywięcjużproceduręskładowaną,akceptującąparametrtablicowyzawierający
zbiórwierszyznazwamilokalizacjiistawkamikosztów,którenależywstawićdotabe-
liProduction.Location,uzupełniającinformacjęodostępnościidaciemodyfikacji
awszystkieteoperacjewykonywanebędąprzyużyciutylkojednegoparametruijed-
nejinstrukcjiINSERTINTO…SELECT!Proceduraskładowanianicniewieiniedba
oto,wjakisposóbproceswywołującyzapełniłdanymiparametrtablicowy
,który
zostanieprzezproceduręużytywinstrukcjiINSERTINTO…SELECT.Dodawanie
poszczególnychwierszydoparametrutablicowegomożenp.odbywaćsięwprocesie
wywołującymwsposóbręczny:
DECLARE@LocationTvpASLocationUdt
INSERTINTO@LocationTvpVALUES('UK',122.4)
INSERTINTO@LocationTvpVALUES('Paris',359.73)
EXECuspInsertProductionLocation@LocationTvp