Hoja inayobadilika au "@Tablename variable". Vigezo Vigezo katika sql

Kabla ya kutofautisha au mara kwa mara inaweza kutumika katika programu, karibu kila wakati inahitaji kutangazwa. Matangazo yote lazima yawekwe katika sehemu ya matangazo ya mpango wa PL/SQL. Katika PL/SQL, matamko yanaweza kurejelea vigeu, vibadilishi, TYPE (kama vile mkusanyiko au rekodi), na vighairi. Nakala hii inashughulikia matamko tofauti na ya kila wakati.

Kutangaza Kigeu cha PL/SQL

Unapotangaza kigezo, PL/SQL hutenga kumbukumbu kushikilia thamani yake na huipa eneo la kumbukumbu lililotengwa jina ambalo thamani inaweza kurejeshwa na kurekebishwa. Tamko hilo pia linabainisha aina ya data ya kutofautisha; inatumika kuangalia maadili yaliyopewa. Sintaksia ya msingi ya kutangaza kigeugeu au kisichobadilika ni:

Aina ya data ya jina [ := | DEFAULT default_value];

ANZA KWA kitabu_rec IN (CHAGUA * KUTOKA kitabu) LOOP mchakato_kitabu (kitabu_rec);

MWISHO KITANZI; MWISHO;

  • Manufaa ya Matangazo Yanayounganishwa
  • Katika matamko yote, aina ya kutofautisha (tabia, nambari, kimantiki, n.k.) imebainishwa kwa uwazi. Kila tamko hubainisha moja kwa moja aina ya data na, kwa kawaida, kizuizi kinachowekwa na madhumuni ya aina hiyo. Hii ni mbinu ya kawaida ya kutangaza vigezo, lakini inaweza kusababisha matatizo katika hali fulani.

Usawazishaji na safu wima za hifadhidata. Tofauti ya PL/SQL mara nyingi "inawakilisha" habari kutoka kwa jedwali la hifadhidata. Ukitangaza wazi kutofautisha na kisha kubadilisha muundo wa jedwali, inaweza kuvunja programu yako.

Urekebishaji wa vigezo vya ndani. Wacha tuseme ubadilishaji wa PL/SQL huhifadhi maadili yaliyohesabiwa ambayo hutumiwa katika sehemu tofauti kwenye programu. Ni nini matokeo ya kurudia (kuweka msimbo ngumu) aina sawa za data na vikwazo kwenye matamko yote?

Kuweka Maadili Yanayobadilika

WEKA @b = @a * 1.5

Kumbuka kuwa taarifa hizi zote hufanya shughuli za ugawaji wa moja kwa moja, ama kwa kutumia thamani zilizo wazi au vigeu vingine vingine. Huwezi kutumia taarifa ya SET kupeana thamani kwa kigezo ambacho kinarejeshwa na hoja; swala lazima litekelezwe tofauti na tu baada ya kuwa matokeo yanaweza kutolewa kwa kutumia taarifa ya SET. Kwa mfano, jaribio la kutekeleza taarifa kama hiyo husababisha kosa:

WEKA @c = COUNT(*) KUTOKA Jiji

na taarifa ifuatayo inatekelezwa kwa mafanikio kabisa:

WEKA @c = (CHAGUA COUNT(*) KUTOKA Jiji)

Kauli ya SELECT kwa kawaida hutumiwa kugawa thamani kwa vigeugeu wakati chanzo cha habari kuhifadhiwa katika kigezo ni swali. Kwa mfano, vitendo vinavyotekelezwa katika nambari iliyo hapo juu hutekelezwa kwa kawaida zaidi kwa kutumia taarifa ya SELECT:

CHAGUA @c = COUNT(*) KUTOKA Jiji

Kumbuka kuwa nambari hii ni wazi kidogo (haswa, ni mafupi zaidi, ingawa inafanya mambo sawa).

Kwa hivyo, inawezekana kuunda mkataba ufuatao unaokubalika kwa ujumla kwa matumizi ya waendeshaji wote wawili.

Taarifa ya SET inatumiwa wakati operesheni rahisi ya kazi ya kutofautiana inapaswa kufanywa, i.e. ikiwa thamani inayokabidhiwa tayari imetolewa kwa uwazi katika umbo la thamani mahususi au kwa namna ya kigezo kingine.

Taarifa ya SELECT inatumiwa wakati ugawaji wa thamani kwa kigezo lazima utegemee hoja.

Kutumia Vigeu katika Maswali ya SQL

Mojawapo ya sifa muhimu za T-SQL ni kwamba viambajengo vinaweza kutumika katika hoja bila hitaji la kuunda mifuatano changamano inayopachika vigeu kwenye msimbo wa programu. Dynamic SQL inaendelea kuwepo, lakini thamani moja inaweza kubadilishwa kwa urahisi zaidi - kwa kutumia kutofautiana.

Popote msemo unaweza kutumika katika swala, kigezo pia kinaweza kutumika. Mfano ufuatao unaonyesha matumizi ya kutofautisha katika kifungu cha WHERE:

TANGAZA @IdProd int;

WEKA @IdProd = 1;

CHAGUA

Seva ya Microsoft SQL ina aina maalum ya data TABLE, kulingana na ambayo tunaweza kuunda vigezo vya meza, ili kuzitumia katika maagizo na taratibu zako, na leo tutaangalia vigezo hivi, tujue jinsi vinavyotangazwa na ni vipengele gani vya vigezo hivi vinavyo.

Maelezo ya vigezo vya jedwali la MS SQL Server

Vigezo vya Jedwali ni vigeuzo vilivyo na aina maalum ya data ya TABLE ambayo hutumika kuhifadhi kwa muda seti inayotokana ya data katika mfumo wa safu mlalo za jedwali. Walionekana nyuma katika toleo la 2005 la seva ya SQL. Unaweza kutumia vigeu hivyo katika taratibu zilizohifadhiwa, vitendaji, vichochezi, na vifurushi vya kawaida vya SQL. Vigeu vya jedwali huundwa kwa njia sawa na vigeu vya kawaida kwa kuvitangaza kwa taarifa ya DECLARE.

Vigezo vya aina hii vinakusudiwa kama mbadala kwa meza za muda. Ikiwa tunazungumzia kuhusu ikiwa ni bora kutumia vigezo vya meza au meza za muda, basi hakuna jibu la wazi la vigezo vya meza vina faida na hasara. Kwa mfano, mimi binafsi napenda kutumia vijiwezo vya jedwali kwa sababu ni rahisi kuunda ( hizo. tangaza) na hakuna haja ya kufikiria juu ya kuziondoa au kuziondoa mwishoni mwa maagizo, kwani zinafutwa kiotomatiki ( kama vile vigeuzo vya kawaida) Lakini wakati huo huo, ni bora kutumia vigezo vya meza tu wakati utahifadhi kiasi kidogo cha data ndani yao, vinginevyo inashauriwa kutumia meza za muda.

Manufaa ya Vigeu vya Jedwali katika Seva ya Microsoft SQL

  • Vigezo vya jedwali hufanya kama vigeu vya kawaida. Wana uwanja uliofafanuliwa kwa usahihi wa maombi;
  • Vigezo vya jedwali vinafutwa kiotomatiki mwishoni mwa taarifa ambapo vilifafanuliwa;
  • Wakati wa kutumia vigezo vya meza katika taratibu zilizohifadhiwa, recompilations hutokea mara nyingi kuliko wakati wa kutumia meza za muda;
  • Miamala inayotumia vigeu vya TABLE inaendelea tu wakati kigezo sambamba kinasasishwa. Kutokana na hili, vigeu vya jedwali vina uwezekano mdogo wa kufungwa na vinahitaji rasilimali chache ili kudumisha kumbukumbu.

Hasara za Vigeu vya Jedwali katika Seva ya MS SQL

  • Hoja zinazorekebisha vigeu vya TABLE hazitengenezi mipango ya hoja;
  • Vigezo vya TABLE havina takwimu za usambazaji na hazisababishi marejesho, kwa hivyo inashauriwa kuzitumia kwa idadi ndogo ya safu;
  • Vigezo vya jedwali haviwezi kurekebishwa mara tu vinapoundwa;
  • Vigezo vya jedwali haviwezi kuundwa kwa kutumia taarifa ya SELECT INTO;
  • Vigezo vya TABLE havibadiliki wakati wa urejeshaji nyuma wa shughuli kwa sababu vina upeo mdogo na si sehemu ya hifadhidata zinazoendelea.

Mifano ya kutumia vigezo vya jedwali katika Seva ya Microsoft SQL

Sasa hebu tuendelee kufanya mazoezi, na kwanza ningependa kutambua kwamba seva yangu ni Microsoft SQL Server 2016 Express, kwa maneno mengine, maswali yote hapa chini yaliendeshwa kwenye toleo hili la DBMS.

Kwanza, hebu tuunde jedwali la majaribio na tujaze na data ya jaribio ili kuona jinsi vijiwezo vya jedwali vinaweza kutumika na jedwali za kawaida.

TUNZA Jedwali la Kujaribiwa la TABLE(ProductId INT IDENTITY(1,1) NOT NULL, ProductName VARCHAR(50) NULL CONSTRAINT PK_TestTable PRIMARY KEY CLUSTERED (ProductId ASC)) NENDA INGIZA KWENYE Jedwali la Kujaribu (Jina la Bidhaa) THAMANI ("Kompyuta"). , ("Printer") NENDA CHAGUA * KUTOKA TestTable


Nilitumia taarifa ya CREATE TABLE kuunda jedwali la TestTable, kisha nikatumia taarifa ya INSERT kwa kushirikiana na mjenzi wa thamani ya jedwali la VALUES kuongeza data kwenye jedwali, kisha nikatumia taarifa ya SELECT kuchagua kutoka kwa jedwali mpya iliyoundwa.

Kutangaza tofauti ya jedwali na kuitumia

Katika mfano huu, tutatangaza kutofautisha kwa jedwali, kuongeza data kwake, na kufanya uteuzi kutoka kwa jedwali mbili ( meza ya kutofautiana na meza ya kawaida) pamoja na muungano.

Kutangaza mabadiliko ya jedwali TANGAZA @TableVar TABLE(ProductId INT NOT NULL, Price MONEY NULL);


--Kuongeza data kwa jedwali la kutofautisha INSERT INTO @TableVar (ProductId, Price) THAMANI (1, 500), (2, 300), (3, 200) --Kwa kutumia kigeugeu cha jedwali chenye data jiunge SELECT TTable.ProductId, TTable .ProductName , TVar.Price KUTOKA @TableVar TVar KUSHOTO JIUNGE NA Jedwali la Kujaribu TTable ON TVar.ProductId = TTable.ProductId

Kuunda kibadilishaji cha jedwali kwa ufunguo msingi, kizuizi cha UNIQUE, na faharasa isiyojumuishwa

Mfano huu unaonyesha jinsi unavyoweza kuunda ufunguo msingi, vikwazo vya KIPEKEE, na faharasa zisizounganishwa kwenye vigeu vya jedwali. Uwezo wa kuunda faharasa isiyo na nguzo imekuwa ikipatikana tangu Microsoft SQL Server 2014.


Hii inahitimisha hadithi yangu kuhusu vigezo vya meza, ikiwa unataka kujifunza lugha ya T-SQL kwa undani, napendekeza kusoma kitabu changu "Njia ya Mpangilio wa T-SQL", natumaini nyenzo hiyo ilikuwa muhimu kwako, bye!

Katika nyenzo hii tutaangalia misingi ya programu katika lugha ya T-SQL, tutajua ni aina gani ya lugha, ni uwezo gani wa msingi unao, ni nini kinachojenga kinajumuisha na, bila shaka, katika mchakato wa haya yote nitatoa mifano ya kanuni.

Na ningependa kuanza na ukweli kwamba kwenye tovuti hii mimi na wewe tayari tumetoa nyenzo nyingi kwa lugha ya SQL na haswa ugani wake wa Transact-SQL ( Unaelewaje T-SQL ni kifupisho cha Transact-SQL) Na hata walitengeneza ndogo mwongozo kwa Kompyuta juu ya lugha hii na, bila shaka, tuliangalia mifano mingi, lakini kama vile programu katika T-SQL huko, kwa mfano, vigezo, ujenzi wa masharti, maoni, tuligusa, lakini hatukuzingatia hili. Lakini kwa kuwa tunayo tovuti ya waandaaji wa programu wanaoanza, niliamua kutoa nyenzo hii kwa misingi hii.

Lugha ya programu ya T-SQL

Transact-SQL (T-SQL) ni kiendelezi cha lugha ya SQL kutoka Microsoft na inatumika katika Seva ya SQL kwa utayarishaji wa hifadhidata.

Seva ya SQL inajumuisha miundo, vijenzi, na utendakazi nyingi zinazopanua uwezo wa lugha ya SQL ya kawaida ya ANSI, ikijumuisha upangaji wa kawaida, ambao hutofautiana na uandishi wa hoja wa kawaida.

Na leo tutaangalia sehemu hiyo ya misingi ya lugha ya T-SQL, ambayo inahusisha kuandika msimbo ili kutekeleza utendaji fulani ( kwa mfano, katika utaratibu au kazi), na sio tu hoja ya hifadhidata.

Vigezo katika T-SQL

Na tutaanza na anuwai, zinahitajika ili kuhifadhi data ya muda ambayo tunahitaji kuhifadhi kwa muda na kisha kutumia.

Kuna aina mbili za vigezo katika T-SQL - ndani na kimataifa. Vigezo vya ndani vinapatikana tu ndani ya kipindi ambacho viliundwa, ilhali vigeu vya kimataifa vinatumiwa kupata taarifa kuhusu seva ya SQL au baadhi ya taarifa zinazobadilika katika hifadhidata.

Vigezo vya ndani vinatangazwa kwa kutumia neno kuu TANGAZA na kuanza na ishara @ . Kama ilivyo katika lugha nyingi za programu, vigezo katika T-SQL lazima ziwe na aina maalum ya data. Kuna aina nyingi za data katika seva ya SQL; tulizichunguza kwa undani katika kitabu cha kumbukumbu ambacho nilitaja hapo juu.

Unaweza kutumia amri kugawa thamani kwa kutofautisha WEKA au Chagua.

Kama nilivyosema tayari, anuwai za ulimwengu zinahitajika ili kupata habari yoyote juu ya seva au hifadhidata, kwa mfano, anuwai za ulimwengu katika SQL Server ni pamoja na:

  • @@ROWCOUNT - huhifadhi idadi ya rekodi zilizochakatwa na amri ya awali;
  • @@ERROR - inarudisha msimbo wa makosa kwa amri ya mwisho;
  • @@SERVERNAME - jina la seva ya ndani ya SQL;
  • @@VERSION - Nambari ya toleo la Seva ya SQL;
  • @@IDENTITY ndiyo thamani ya mwisho ya kaunta iliyotumika katika operesheni ya kuingiza ( ingiza).

Sasa, kama mfano, wacha tuunda vijiti viwili na aina ya data INT, tuwape maadili, ya kwanza kwa kutumia amri ya SET, na ya pili kwa kutumia amri ya Chagua, kisha tu onyesha maadili haya, na pia uonyeshe thamani ya @@VERSION tofauti, yaani. Jua toleo la seva ya SQL.

TANGAZA @TestVar1 INT TANGAZA @TestVar2 INT SET @TestVar1 = 1 CHAGUA @TestVar2 = 2 CHAGUA @TestVar1 AS [Variable 1], @TestVar2 AS [Variable 2], @@VERSION AS [SQL Server Version]

Vifurushi

Kifurushi katika T-SQL- hizi ni amri za SQL au taarifa ambazo zimeunganishwa katika kundi moja na seva ya SQL itakusanya na kuzitekeleza kwa ujumla.

Ili kuruhusu seva ya SQL kuelewa kuwa unapitisha kundi la amri, lazima ubainishe neno kuu NENDA baada ya amri zote ambazo unataka kuchanganya kwenye kifurushi.

Vigezo vya ndani vitaonekana tu ndani ya kifurushi ambacho viliundwa, i.e. Hutaweza tena kufikia kigezo baada ya kifurushi kukamilika.

Wacha tuseme ikiwa mfano tuliotumia hapo juu umejumuishwa kwenye kifurushi na kisha tunajaribu kupata maadili ya anuwai, basi tutapata yafuatayo:


Wale. tunaona kuwa tuna hitilafu kutokana na ukweli kwamba utofauti wa @TestVar1 haujatangazwa.

Masharti

Miundo hii ina maana ya matawi, i.e. Kulingana na ikiwa masharti fulani yametimizwa au hayatimizwi, taarifa za T-SQL zitabadilisha mwelekeo.

KAMA…VINGINEVYO

Ujenzi huu upo, labda katika lugha zote za programu, inahusisha kuangalia ikiwa hali zimetimizwa na ikiwa hundi zote zimepitishwa, basi amri inayofuata inatekelezwa, ikiwa sivyo, basi hakuna kitu kinachotekelezwa, lakini unaweza kutaja neno kuu la ELSE na kisha ndani. kesi hii waendeshaji maalum watatekelezwa baada ya neno hili.

TANGAZA @TestVar1 INT TANGAZA @TestVar2 VARCHAR(20) WEKA @TestVar1 = 5 IF @TestVar1 > 0 SET @TestVar2 = "Kubwa kuliko 0" ELSE SET @TestVar2 = "Chini ya 0" CHAGUA @TestVar2 AS [TestVar2]

IKIWA IPO

Ujenzi huu unakuwezesha kuamua uwepo wa rekodi zilizoelezwa na hali. Kwa mfano, tunataka kujua ikiwa kuna rekodi fulani kwenye jedwali na mechi ya kwanza inapogunduliwa, usindikaji wa amri huacha. Kimsingi hii ni sawa na COUNT(*) > 0.

Kwa mfano, tunataka kuangalia ikiwa kuna rekodi zilizo na thamani ya kitambulisho >=0 kwenye jedwali test_table, na kulingana na hili tutaamua jinsi ya kuendelea.


TANGAZA @TestVar VARCHAR(20) IKIWA IPO(CHAGUA * KUTOKA jedwali_la test WHERE id > = 0) WEKA @TestVar = "Rekodi zipo" ELSE SET @TestVar = "Hakuna rekodi zilizopo" CHAGUA @TestVar AS [Rekodi zipo]

KESI

Muundo huu hutumiwa pamoja na taarifa iliyochaguliwa na inakusudiwa kuchukua nafasi ya matumizi ya mara kwa mara ya muundo wa IF. Ni muhimu katika hali ambapo unahitaji kuangalia kutofautisha ( au shamba) kwa uwepo wa maadili fulani.


TANGAZA @TestVar1 INT TANGAZA @TestVar2 VARCHAR(20) WEKA @TestVar1 = 1 CHAGUA @TestVar2 = KESI @TestVar1 WAKATI 1 KISHA "Moja" WAKATI 2 KISHA "Mbili" VINGINEVYO "Haijulikani" MALIZE CHAGUA @NumberVar2 AS]

ANZA...MWISHO

Ujenzi huu ni muhimu ili kuunda kizuizi cha amri, i.e. kwa mfano, ikiwa tulitaka kutekeleza sio amri moja baada ya kizuizi cha IF, lakini kadhaa, basi tungelazimika kuandika amri zote ndani ya BEGIN...END block.

Wacha turekebishe mfano wetu uliopita ( kuhusu IKIWA IPO) ili ikiwa kuna rekodi id > = 0 kwenye jedwali test_table, pamoja na kugawa thamani kwa utofauti wa @TestVar, tutafanya sasisho, i.e. kusasisha baadhi ya data katika jedwali moja, na pia kuonyesha idadi ya safu mlalo tulizosasisha kwa kutumia @@ROWCOUNT utofauti wa kimataifa.


TANGAZA @TestVar1 VARCHAR(20) TANGAZA @TestVar2 INT SET @TestVar2 = 0 IKIWA IPO(CHAGUA * KUTOKA test_table WAPI id > = 0) ANZA WEKA @TestVar1 = "Rekodi zipo" SASISHA test_table SET column1 = = 50 WHERE id > @TestVar2 = @@ROWCOUNT MWISHO ELSE WEKA @TestVar1 = "Hakuna rekodi" CHAGUA @TestVar1 AS [Rekodi zipo], @TestVar2 AS [Safu mlalo zimeathirika:]

Mizunguko ya T-SQL

Ikiwa tunazungumzia kuhusu vitanzi kwa ujumla, zinahitajika kurudia utekelezaji wa amri mara nyingi. Kuna kitanzi kimoja katika T-SQL HUKU na sharti, hii ina maana kwamba amri zitaanza, na zitarudiwa hadi hali kabla ya kuanza kwa kitanzi kufikiwa, pia utekelezaji wa kitanzi unaweza kudhibitiwa kwa kutumia maneno. BREAK Na ENDELEA.


TANGAZA @Cnt INT = 1, @matokeo INT = 0, @CountRow INT CHAGUA @CountRow = COUNT(*) KUTOKA test_table WAKATI @Cnt<= @CountRow BEGIN SET @Cnt += 1 SET @result += 1 IF @Cnt = 20 BREAK ELSE CONTINUE END SELECT @result AS [Количество выполнений цикла:]

Katika mfano huu, sisi kwanza, bila shaka, tunatangaza vigezo ( Mara moja tunaanzisha Cnt na matokeo, kwa njia hii unaweza kuweka maadili ya vigezo kuanzia SQL Server 2008.) Kisha tunagundua ni safu ngapi kwenye jedwali la test_table na baada ya hapo tunaangalia ikiwa idadi ya safu kwenye jedwali ni kubwa kuliko au sawa na counter yetu, kisha tunaingiza kitanzi chetu cha jaribio. Katika kitanzi tunaongeza thamani ya kukabiliana, andika matokeo na uangalie tena, ikiwa counter yetu tayari imefikia thamani ya 20, basi tutailazimisha kukomesha, ikiwa sio, basi iendelee mpaka thamani ya counter inakuwa kubwa kuliko au sawa. kwa idadi ya safu kwenye jedwali au hadi 20 ikiwa kuna safu zaidi kwenye jedwali.

Maoni

Wanahitajika kuelezea na kuchukua maelezo katika msimbo, kwa sababu ikiwa nambari ni kubwa na ngumu, basi baada ya muda unaweza kusahau tu kwa nini hii ni na kwa nini uliandika hii au sehemu hiyo ya msimbo. Katika T-SQL, kuna mstari mmoja (-Text) na maoni ya mistari mingi (/*Nakala*/).


Amri za T-SQL

GOTO

Kwa kutumia amri hii, unaweza kupitia msimbo hadi kwenye lebo maalum. Kwa mfano, inaweza kutumika wakati unataka kufanya aina ya kitanzi, lakini bila wakati.


TANGAZA @Cnt INT = 0 Lebo: --Weka lebo SET @Cnt += 1 --Ongeza 1 kwa kigezo ikiwa @Cnt< 10 GOTO Metka --Если значение меньше 10, то переходим к метке SELECT @Cnt AS [Значение Cnt =]

WAITFOR

Amri inaweza kusitisha utekelezaji wa nambari kwa muda fulani au hadi wakati maalum. Kigezo KUCHELEWA hufanya pause ya urefu fulani, na WAKATI husitisha mchakato hadi wakati uliowekwa. Thamani za parameta zimeainishwa katika muundo hh:mi:ss


TANGAZA @TimeStart time, @TimeEnd time WEKA @TimeStart = CONVERT (saa, GETDATE())--Tafuta saa WAITFOR DELAY "00:00:05"--Sitisha kwa sekunde 5 WEKA @TimeEnd = CONVERT (saa, GETDATE ()) )--Gundua muda tena --Jua ni muda gani umepita kwa sekunde CHAGUA DATEDIFF(ss, @TimeStart, @TimeEnd) AS [Sekunde Zilizopita:]

KURUDI

Amri hii inatumika kuondoa hoja au utaratibu bila masharti. KUREJESHA kunaweza kutumika wakati wowote ili kuacha utaratibu, kundi, au kizuizi cha taarifa. Kila kitu kinachokuja baada ya amri hii hakitekelezwi.


TANGAZA @Cnt INT = 1, @result varchar(15) /*Ikiwa thamani ya Cnt ni chini ya 0, basi amri zifuatazo hazitatekelezwa na hutaona [Matokeo] safu*/ IF @Cnt< 0 RETURN SET @result = "Cnt больше 0" SELECT @result AS [Результат:]

CHAPISHA

Kutuma ujumbe wa huduma unaweza kutumia amri CHAPISHA. Katika Studio ya Usimamizi, ujumbe huu utaonekana kwenye kichupo cha Messages ( Ujumbe).


TANGAZA @Cnt INT = 10, @TestVar varchar(100) IF @Cnt > 0 SET @TestVar = "Thamani ya kigezo Cnt ni kubwa kuliko 0 na ni sawa na " + CAST(@Cnt AS VARCHAR(10)) ElSE SET @TestVar = "Thamani ya kigezo Cnt ni chini ya 0 na ni sawa na " + CAST(@Cnt AS VARCHAR(10)) PRINT @TestVar

Shughuli

Shughuli ni amri au kizuizi cha amri ambacho hukamilika kwa mafanikio au kughairiwa kwa ujumla. Kwa maneno mengine, ikiwa amri moja au maagizo ndani ya muamala hayatafaulu, basi kila kitu ambacho kilishughulikiwa kabla pia kinaghairiwa, hata kama amri za hapo awali zilikamilishwa kwa mafanikio.

Utaratibu huu ni muhimu ili kuhakikisha uadilifu wa data, i.e. Hebu sema una utaratibu wa kuhamisha fedha kutoka kwa akaunti moja hadi nyingine, lakini hali inaweza kutokea ambayo fedha zilitolewa kutoka kwa akaunti, lakini hazikufika kwenye akaunti nyingine. Kwa mfano, maagizo ya SQL ambayo huondoa pesa yalifanya kazi, lakini wakati wa kutekeleza maagizo yaliyoweka pesa, hitilafu ilitokea, kwa maneno mengine, pesa zilitolewa na kupotea tu. Ili kuzuia hili, taarifa zote za SQL zimeandikwa ndani ya shughuli, na kisha ikiwa hali hiyo hutokea, mabadiliko yote yatafutwa, i.e. pesa zitarudishwa kwenye akaunti yako.

Hebu tujue ni nini kilicho kwenye jedwali letu (kitambulisho = KITAMBULISHO) CHAGUA * KUTOKA_Jedwali_la_test --Anzisha muamala ANZA TRAN --Kwanza sasisha data yote USASISHA test_meza SET safu1 = safu1 - 5 --Kisha ongeza safu mlalo zenye thamani mpya INSERT INTO test_table CHAGUA safu wima1 KUTOKA kwa_jedwali_la_jaribu --Kama kuna hitilafu, basi ghairi kila kitu IF @@error != 0 ANZA KURUDISHA TRAN KURUDISHA COMMIT TRAN --Hebu tuone kilichotokea CHAGUA * KUTOKA jedwali_la test

Katika mfano huu, ikiwa tulikuwa na hitilafu wakati wa kuongeza data (INSERT), basi UPDATE ingeghairiwa.

Kushughulikia hitilafu - JARIBU...CATCH tengeneza

Wakati wa utekelezaji wa kanuni ya T-SQL, hali isiyotarajiwa inaweza kutokea, i.e. kosa ambalo linahitaji kushughulikiwa. Katika seva ya SQL, kuanzia na SQL Server 2005, kuna muundo kama vile JARIBU...KAMATA, ambayo inaweza kufuatilia kosa.


ANZA KUJARIBU KUTANGAZA @TestVar1 INT = 10, @TestVar2 INT = 0, @result INT SET @result = @TestVar1 / @TestVar2 MWISHO JARIBU KUANZA CATCH SELECT ERROR_NUMBER() AS [Nambari ya hitilafu], ERROR_MESSAGE() KAMA [Maelezo ya hitilafu] KAMATA

Katika mfano huu, hali ilitokea kwamba mgawanyiko kwa sifuri hutokea ( Kama unavyojua, huwezi kugawanya kwa 0) na kwa kuwa kizuizi chetu cha msimbo kiliwekwa katika muundo wa TRY, tulipata ubaguzi ambao tunapata nambari ya makosa na maelezo yake.

Nadhani hii inatosha kwa misingi, ikiwa unataka kusoma muundo wote wa lugha ya T-SQL kwa undani zaidi, ninapendekeza usome kitabu changu " Njia ya Mtayarishaji wa T-SQL", ambayo lugha ya T-SQL tayari imejadiliwa kwa undani zaidi, nimemaliza, bahati nzuri!