ተለዋዋጭ መጠይቅ ወይም "@Tablename ተለዋዋጭ" ተለዋዋጮች ተለዋዋጮች በ sql

ተለዋዋጭ ወይም ቋሚ በአንድ ፕሮግራም ውስጥ ጥቅም ላይ ከመዋሉ በፊት ሁልጊዜ ማለት ይቻላል መታወጅ ያስፈልገዋል. ሁሉም ማስታወቂያዎች በPL/SQL ፕሮግራም የማስታወቂያ ክፍል ውስጥ መቀመጥ አለባቸው። በPL/SQL፣ መግለጫዎች ተለዋዋጮችን፣ ቋሚዎችን፣ TYPE (እንደ ስብስቦች ወይም መዝገቦች ያሉ) እና ልዩ ሁኔታዎችን ሊያመለክቱ ይችላሉ። ይህ መጣጥፍ ተለዋዋጭ እና ቋሚ መግለጫዎችን ይሸፍናል።

የPL/SQL ተለዋዋጭ ማወጅ

ተለዋዋጭ ስታውጅ PL/SQL ሜሞሪ እሴቱን እንዲይዝ ይመድባል እና ለተመደበው የማህደረ ትውስታ ቦታ እሴቱ የሚወጣበት እና የሚስተካከልበት ስም ይሰጠዋል። መግለጫው የተለዋዋጭውን የውሂብ አይነትም ይገልጻል; ለእሱ የተመደቡትን ዋጋዎች ለመፈተሽ ጥቅም ላይ ይውላል. ተለዋዋጭ ወይም ቋሚ ለማወጅ መሠረታዊው አገባብ፡-

የስም ዳታ አይነት [:= | DEFAULT default_value]; BEGIN ለመጽሐፍ_ሪክ (ከመጽሐፍ ይምረጡ *) LOOP ሂደት_መጽሐፍ (book_rec); LOOP ጨርስ; መጨረሻ;

የተገናኙ ማስታወቂያዎች ጥቅሞች

በሁሉም መግለጫዎች ውስጥ, የተለዋዋጭ አይነት (ቁምፊ, አሃዛዊ, ሎጂካዊ, ወዘተ) በግልጽ ይገለጻል. እያንዳንዱ መግለጫ የመረጃውን አይነት እና፣ አብዛኛውን ጊዜ፣ በዚህ አይነት አላማ የሚጣለውን ገደብ በቀጥታ ይገልጻል። ይህ ተለዋዋጮችን ለማወጅ የተለመደ አካሄድ ነው, ነገር ግን በአንዳንድ ሁኔታዎች ችግር ሊያስከትል ይችላል.

  • ከመረጃ ቋት አምዶች ጋር ማመሳሰል። የPL/SQL ተለዋዋጭ ብዙውን ጊዜ ከመረጃ ቋት ሰንጠረዥ መረጃን "ይወክላል". ተለዋዋጭ በግልጽ ካወጁ እና የጠረጴዛውን መዋቅር ከቀየሩ, ፕሮግራምዎን ሊሰብረው ይችላል.
  • የአካባቢ ተለዋዋጮችን መደበኛ ማድረግ. እንበል የPL/SQL ተለዋዋጭ በመተግበሪያው ውስጥ በተለያዩ ቦታዎች ጥቅም ላይ የሚውሉ የተሰሉ እሴቶችን ያከማቻል። በሁሉም መግለጫዎች ላይ ተመሳሳይ የመረጃ አይነቶች እና ገደቦች መደጋገም (ሃርድ-ኮድ) መዘዞች ምንድናቸው?

ተለዋዋጭ እሴቶችን ማቀናበር

በአሁኑ ጊዜ የ SQL ቋንቋ የተለዋዋጭ እሴትን ለማዘጋጀት ሁለት መንገዶችን ያቀርባል - ለዚሁ ዓላማ የ SELECT ወይም SET መግለጫን መጠቀም ይችላሉ. ከተግባራዊነት አንፃር፣ እነዚህ መግለጫዎች የሚሠሩት ከሞላ ጎደል ተመሳሳይ ነው፣ የ SELECT መግለጫው በ SELECT መግለጫ ውስጥ ከተጠቀሰው ሠንጠረዥ ዋናውን የምደባ ዋጋ እንድታገኝ የሚያስችል ካልሆነ በስተቀር።

የSET መግለጫው በተለምዶ የተለዋዋጮችን እሴቶች በሥርዓት ቋንቋዎች ይበልጥ የተለመደ በሆነ መልኩ ለማዘጋጀት ይጠቅማል። የዚህ ኦፕሬተር አጠቃቀም የተለመዱ ምሳሌዎች የሚከተሉትን ያካትታሉ:

አዘጋጅ @b = @a * 1.5

እነዚህ ሁሉ መግለጫዎች ግልጽ የሆኑ እሴቶችን ወይም ሌሎች ተለዋዋጮችን በመጠቀም ቀጥተኛ የምደባ ስራዎችን እንደሚያከናውኑ ልብ ይበሉ። በጥያቄ ለተመለሰው ተለዋዋጭ እሴት ለመመደብ የSET መግለጫን መጠቀም አይችሉም። ጥያቄው በተናጠል መከናወን አለበት እና ከዚያ በኋላ ብቻ የ SET መግለጫን በመጠቀም ውጤቱን መስጠት ይቻላል. ለምሳሌ፣ ይህን መግለጫ ለማስፈጸም የሚደረግ ሙከራ ስህተትን ያስከትላል፡-

አዘጋጅ @c = COUNT(*) ከከተማ

እና የሚከተለው መግለጫ በተሳካ ሁኔታ ይፈጸማል-

አዘጋጅ @c = (ከከተማ COUNT(*) ምረጥ)

የ SELECT መግለጫ በተለዋዋጭ ውስጥ የሚከማች የመረጃ ምንጭ ጥያቄ ሲሆን በተለዋዋጭ እሴቶችን ለመመደብ ይጠቅማል። ለምሳሌ፣ ከዚህ በላይ ባለው ኮድ ውስጥ የተከናወኑ ድርጊቶች የ SELECT መግለጫን በመጠቀም በብዛት ይተገበራሉ፡

ከከተማ @c = COUNT(*) ይምረጡ

ይህ ኮድ ትንሽ ግልጽ መሆኑን ልብ ይበሉ (በተለይ, የበለጠ አጭር ነው, ምንም እንኳን ተመሳሳይ ነገሮችን ቢያደርግም).

ስለዚህ ለሁለቱም ኦፕሬተሮች አጠቃቀም የሚከተለውን በአጠቃላይ ተቀባይነት ያለው ስምምነት ማዘጋጀት ይቻላል.

የSET መግለጫው ጥቅም ላይ የሚውለው ቀላል ተለዋዋጭ የምደባ ስራ ሲከናወን ነው፣ ማለትም. የተመደበው ዋጋ አስቀድሞ በተወሰነ እሴት መልክ ወይም በሌላ ተለዋዋጭ መልክ በግልጽ ከተሰጠ.

የ SELECT መግለጫ ጥቅም ላይ የሚውለው ለተለዋዋጭ እሴት መስጠት በጥያቄ ላይ የተመሰረተ መሆን ሲኖርበት ነው።

በ SQL መጠይቆች ውስጥ ተለዋዋጮችን መጠቀም

ከ T-SQL ጠቃሚ ባህሪያት አንዱ ተለዋዋጮች በፕሮግራሙ ኮድ ውስጥ ተለዋዋጮችን የሚያካትት ውስብስብ ተለዋዋጭ ሕብረቁምፊዎች መፍጠር ሳያስፈልግ በጥያቄዎች ውስጥ ጥቅም ላይ ሊውል ይችላል። ተለዋዋጭ SQL መኖሩን ይቀጥላል, ነገር ግን አንድ ነጠላ እሴት በቀላሉ ሊለወጥ ይችላል - ተለዋዋጭ በመጠቀም.

በጥያቄ ውስጥ አንድ አገላለጽ ጥቅም ላይ ሊውል በሚችልበት ቦታ ሁሉ፣ ተለዋዋጭም መጠቀም ይቻላል። የሚከተለው ምሳሌ በ WHERE አንቀጽ ውስጥ የተለዋዋጭ አጠቃቀምን ያሳያል፡-

@IdProd int አውጁ;

አዘጋጅ @IdProd = 1;

ምረጥ

የማይክሮሶፍት SQL አገልጋይ በምንችለው ላይ የተመሰረተ ልዩ የዳታ አይነት TABLE አለው። የሠንጠረዥ ተለዋዋጮችን ይፍጠሩ, በመመሪያዎ እና በአሰራርዎ ውስጥ እነሱን ለመጠቀም, እና ዛሬ እነዚህን ተለዋዋጮች እንመለከታለን, እንዴት እንደታወጁ እና እነዚህ ተለዋዋጮች ምን አይነት ባህሪያት እንዳላቸው ይወቁ.

የ MS SQL አገልጋይ ሰንጠረዥ ተለዋዋጮች መግለጫ

የሠንጠረዥ ተለዋዋጮችየተገኘውን የውሂብ ስብስብ በጊዜያዊነት በሠንጠረዥ ረድፎች መልክ ለማከማቸት የሚያገለግሉ ልዩ TABLE የውሂብ አይነት ያላቸው ተለዋዋጮች ናቸው። በ 2005 የ SQL አገልጋይ ስሪት ውስጥ ተመልሰው ታዩ። እንደዚህ አይነት ተለዋዋጮች በተከማቹ ሂደቶች፣ ተግባራት፣ ቀስቅሴዎች እና በመደበኛ የ SQL ጥቅሎች ውስጥ መጠቀም ይችላሉ። የሰንጠረዥ ተለዋዋጮች በDECLARE መግለጫ በማወጅ ልክ እንደ መደበኛ ተለዋዋጮች በተመሳሳይ መልኩ ይፈጠራሉ።

የዚህ አይነት ተለዋዋጮች ለጊዜያዊ ጠረጴዛዎች እንደ አማራጭ የታሰቡ ናቸው. የሠንጠረዥ ተለዋዋጮችን ወይም ጊዜያዊ ሰንጠረዦችን መጠቀም የተሻለ ስለመሆኑ ከተነጋገርን, ምንም ግልጽ መልስ የለም, የሠንጠረዥ ተለዋዋጮች ሁለቱም ጥቅሞች እና ጉዳቶች አሏቸው. ለምሳሌ እኔ በግሌ የሠንጠረዥ ተለዋዋጮችን መጠቀም እወዳለሁ ምክንያቱም ለመፍጠር አመቺ ናቸው ( እነዚያ። አስታወቀ) እና በመመሪያው መጨረሻ ላይ እነሱን ለማስወገድ ወይም ለማጽዳት ማሰብ አያስፈልግም, ምክንያቱም እነሱ በራስ-ሰር ስለሚጸዱ ( ልክ እንደ መደበኛ ተለዋዋጮች). ግን በተመሳሳይ ጊዜ የሠንጠረዥ ተለዋዋጮችን መጠቀም የተሻለ ነው ትንሽ መጠን ያለው መረጃ በውስጣቸው ሲያከማቹ, አለበለዚያ ጊዜያዊ ሰንጠረዦችን ለመጠቀም ይመከራል.

የማይክሮሶፍት SQL አገልጋይ ውስጥ የሰንጠረዥ ተለዋዋጮች ጥቅሞች

  • የሰንጠረዥ ተለዋዋጮች እንደ የአካባቢ ተለዋዋጮች ባህሪ አላቸው። በትክክል የተገለጸ የመተግበሪያ መስክ አላቸው;
  • የሠንጠረዥ ተለዋዋጮች በተገለጹበት መግለጫ መጨረሻ ላይ በራስ-ሰር ይጸዳሉ;
  • በተከማቹ ሂደቶች ውስጥ የሰንጠረዥ ተለዋዋጮችን ሲጠቀሙ, ጊዜያዊ ሰንጠረዦችን ከመጠቀም ያነሰ ድግግሞሽ ይከሰታሉ;
  • TABLE ተለዋዋጮችን የሚጠቀሙ ግብይቶች የሚቀጥሉት ተዛማጁ ተለዋዋጭ በሚዘመንበት ጊዜ ብቻ ነው። በዚህ ምክንያት የሰንጠረዥ ተለዋዋጮች የመቆለፍ እድላቸው አነስተኛ ነው እና ምዝግብ ማስታወሻዎችን ለማቆየት ጥቂት ሀብቶችን ይፈልጋሉ።

በ MS SQL አገልጋይ ውስጥ የሰንጠረዥ ተለዋዋጮች ጉዳቶች

  • የ TABLE ተለዋዋጮችን የሚቀይሩ ጥያቄዎች ትይዩ የመጠይቅ እቅዶችን አይፈጥሩም።
  • የሠንጠረዥ ተለዋዋጮች የስርጭት ስታቲስቲክስ የላቸውም እና እንደገና ማጠናቀርን አይቀሰቅሱም ፣ ስለሆነም ለትንሽ ረድፎች እንዲጠቀሙ ይመከራል።
  • የሠንጠረዥ ተለዋዋጮች ከተፈጠሩ በኋላ ሊሻሻሉ አይችሉም;
  • የ SELECT INTO መግለጫን በመጠቀም የሠንጠረዥ ተለዋዋጮች ሊፈጠሩ አይችሉም;
  • የTABLE ተለዋዋጮች በግብይት መልሶ መመለሻ ጊዜ አይለወጡም ምክንያቱም የተወሰነ ወሰን ስላላቸው እና የቋሚ የውሂብ ጎታ አካል አይደሉም።

በማይክሮሶፍት SQL አገልጋይ ውስጥ የሰንጠረዥ ተለዋዋጮችን የመጠቀም ምሳሌዎች

አሁን ወደ ልምምድ እንሂድ እና በመጀመሪያ የእኔ አገልጋይ ማይክሮሶፍት SQL አገልጋይ 2016 ኤክስፕረስ መሆኑን ልብ ማለት እፈልጋለሁ ፣ በሌላ አነጋገር ፣ ሁሉም ጥያቄዎች የተከናወኑት በዚህ የ DBMS ስሪት ላይ ነው።

በመጀመሪያ፣ የጠረጴዛ ተለዋዋጮችን ከመደበኛ ሰንጠረዦች ጋር እንዴት መጠቀም እንደሚቻል ለማየት የሙከራ ሠንጠረዥ እንፍጠር እና በሙከራ መረጃ እንሞላው።

የጠረጴዛ ቴብል ፍጠር (ProductId INT INT (1,1) ባዶ ያልሆነ፣ የምርት ስም VARCHAR(50) NULL CONSTRAINT PK_TestTable ቀዳሚ ቁልፍ ክላስተርድ (ProductId ASC)) ወደ የሙከራ ሰንጠረዥ (የምርት ስም) ቫልዩኤስ ግባ)) ("Complete Name) VALUES") , ("አታሚ") ይሂዱ * ከሙከራ ሰንጠረዥ ይምረጡ


የTestTable ሠንጠረዥን ለመፍጠር የCREATE TABLE መግለጫን ተጠቀምኩኝ፣ በመቀጠል INSERT መግለጫን ከ VALUES ሠንጠረዥ እሴት ገንቢ ጋር በማጣመር ወደ ሠንጠረዡ ዳታ ለመጨመር ተጠቀምኩኝ፣ ከዚያ አዲስ ከተፈጠረው ሠንጠረዥ ለመምረጥ የ SELECT መግለጫን ተጠቀምኩ።

የሠንጠረዥ ተለዋዋጭ ማወጅ እና መጠቀም

በዚህ ምሳሌ፣ የሠንጠረዥ ተለዋዋጭ እናውጃለን፣ ውሂብ እንጨምርበታለን እና ከሁለት ሰንጠረዦች እንመርጣለን ( የሠንጠረዥ ተለዋዋጭ እና መደበኛ ሰንጠረዥ) ከማኅበር ጋር።

የሠንጠረዥ ተለዋዋጭ ማወጅ @TableVar TABLE(ProductId INT NOT NOT, Price MONEY NULL); --ውሂቡን ወደ ሰንጠረዥ ተለዋዋጭ በመጨመር @TableVar (ምርትአይድ፣ ዋጋ) እሴቶች (1፣ 500)፣ (2፣ 300)፣ (3፣200) --የሠንጠረዥ ተለዋዋጭ በመጠቀም ከውሂቡ ጋር ይቀላቀሉ TTable።ProductId፣TTable የምርት ስም፣ TVar.ዋጋ ከ @TableVar ቲቪር ግራ ተቀላቀል የሙከራ ሠንጠረዥ በቲቪ ላይ።ProductId = TTable.ProductId


ከዋና ቁልፍ፣ ልዩ የሆነ ገደብ እና ያልተሰበሰበ መረጃ ጠቋሚ ያለው የሠንጠረዥ ተለዋዋጭ መፍጠር

ይህ ምሳሌ በሠንጠረዥ ተለዋዋጮች ላይ ዋና ቁልፍን፣ ልዩ ገደቦችን እና ያልተሰበሰቡ ኢንዴክሶችን እንዴት መፍጠር እንደሚችሉ ያሳያል። ከማይክሮሶፍት SQL አገልጋይ 2014 ጀምሮ ያልተሰበሰበ መረጃ ጠቋሚ የመፍጠር ችሎታ አለ።

የሰንጠረዥ ተለዋዋጭ መግለጫ @TableVar TABLE(የምርትአይዲ ኢንቲ ኑል ዋና ቁልፍ አይደለም፣- ዋና ቁልፍ የምርት ስም VARCHAR(50) ዋጋ የለውም፣የዋጋ ገንዘብ ባዶ አይደለም፣ልዩ (የምርት ስም፣ ዋጋ)፣ --ገደብ INDEX IX_TableVar -NCLUS ያልተሰበሰበ መረጃ ጠቋሚ); --መረጃን ወደ ሰንጠረዥ ተለዋዋጭ ማስገባት @TableVar (ProductId, Product Name, Price) እሴቶች (1, "Computer", 500), (2, "Monitor", 300), (3, "Printer", 200); --የመረጃ ምርጫ የምርት ስም ከ @TableVar WHERE Price> 200 ይምረጡ


ይህ ስለ ሰንጠረዥ ተለዋዋጮች ያለኝን ታሪክ ያጠናቅቃል, የ T-SQL ቋንቋን በዝርዝር ለማጥናት ከፈለጉ "የ T-SQL ፕሮግራመር መንገድ" መጽሐፌን እንዲያነቡ እመክራለሁ, ቁሱ ለእርስዎ ጠቃሚ እንደነበረ ተስፋ አደርጋለሁ, ደህና!

በዚህ ቁሳቁስ ውስጥ እንመለከታለን በ T-SQL ቋንቋ የፕሮግራም መሰረታዊ ነገሮችምን ዓይነት ቋንቋ እንደሆነ, ምን ዓይነት መሰረታዊ ችሎታዎች እንዳሉት, ምን እንደሚገነቡ እና በእርግጥ በዚህ ሂደት ውስጥ የኮድ ምሳሌዎችን እሰጣለሁ.

እና እኔ እና እርስዎ በዚህ ጣቢያ ላይ ለ SQL ቋንቋ እና በተለይም ለ Transact-SQL ማራዘሚያ ብዙ ቁሳቁሶችን ስለሰጠን መጀመር እፈልጋለሁ ( T-SQL የTransact-SQL ምህጻረ ቃል መሆኑን እንዴት ተረዱ). እና ትንሽ እንኳን ሠርተዋል ለጀማሪዎች መመሪያበዚህ ቋንቋ እና በእርግጥ, ብዙ ምሳሌዎችን ተመልክተናል, ነገር ግን በ T-SQL ውስጥ እንደዚህ አይነት ፕሮግራሞች, ለምሳሌ, ተለዋዋጮች, ሁኔታዊ መዋቅሮች, አስተያየቶች, ነካን, ነገር ግን በዚህ ላይ አላተኮርንም. ግን ለጀማሪ ፕሮግራመሮች የሚሆን ጣቢያ ስላለን፣ ይህንን ጽሑፍ ለእነዚህ መሰረታዊ ነገሮች ለማዋል ወሰንኩኝ።

T-SQL ፕሮግራሚንግ ቋንቋ

ግብይት-SQL (T-SQL) ከማይክሮሶፍት የ SQL ቋንቋ ቅጥያ ሲሆን በ SQL Server ውስጥ ለዳታቤዝ ፕሮግራሚንግ ስራ ላይ ይውላል።

SQL አገልጋይ የ ANSI ስታንዳርድ SQL ቋንቋን አቅም የሚያራዝሙ ብዙ ግንባታዎችን፣ አካላትን እና ተግባራትን ያካትታል፣ ክላሲካል ፕሮግራሚንግንም ጨምሮ፣ ይህም ከተለመደው የጥያቄ አፃፃፍ ይለያል።

እና ዛሬ ያንን የ T-SQL ቋንቋ መሰረታዊ ነገሮች ክፍል እንመለከታለን, ይህም የተወሰኑ ተግባራትን ለመተግበር ኮድ መጻፍን ያካትታል ( ለምሳሌ በሂደት ወይም ተግባር ውስጥ), እና አንዳንድ የውሂብ ጎታ መጠይቅ ብቻ አይደለም.

በT-SQL ውስጥ ተለዋዋጮች

እና በተለዋዋጭዎች እንጀምራለን, ለተወሰነ ጊዜ ለማስቀመጥ እና ከዚያም ለመጠቀም የሚያስፈልጉንን አንዳንድ ጊዜያዊ መረጃዎችን ለማከማቸት ያስፈልጋሉ.

በ T-SQL ውስጥ ሁለት ዓይነት ተለዋዋጮች አሉ - አካባቢያዊ እና ዓለም አቀፍ። የአካባቢ ተለዋዋጮች የተፈጠሩት በተፈጠሩበት ክፍለ ጊዜ ውስጥ ብቻ ነው፣ አለምአቀፍ ተለዋዋጮች ግን ስለ SQL አገልጋይ መረጃን ለማግኘት ወይም በመረጃ ቋቱ ውስጥ አንዳንድ ተለዋዋጭ መረጃዎችን ለማግኘት ያገለግላሉ።

የአካባቢ ተለዋዋጮች የሚገለጹት ቁልፍ ቃሉን በመጠቀም ነው። አወጁእና በምልክት ይጀምሩ @ . እንደ ብዙ የፕሮግራሚንግ ቋንቋዎች፣ በT-SQL ውስጥ ያሉ ተለዋዋጮች የተወሰነ የውሂብ አይነት ሊኖራቸው ይገባል። በ SQL አገልጋይ ውስጥ በጣም ብዙ የመረጃ አይነቶች አሉ፤ ከላይ በጠቀስኩት የማመሳከሪያ መጽሐፍ ውስጥ በዝርዝር መርምረናል።

ለተለዋዋጭ እሴት ለመመደብ ትእዛዞቹን መጠቀም ይችላሉ። አዘጋጅወይም ይምረጡ.

አስቀድሜ እንዳልኩት፣ ስለ አገልጋዩ ወይም ዳታቤዙ ማንኛውንም መረጃ ለማግኘት ዓለም አቀፍ ተለዋዋጮች ያስፈልጋሉ፣ ለምሳሌ፣ በSQL Server ውስጥ ያሉ ዓለም አቀፍ ተለዋዋጮች የሚከተሉትን ያካትታሉ፡-

  • @@ROWCOUNT - በቀድሞው ትዕዛዝ የተከናወኑ መዝገቦችን ብዛት ያከማቻል;
  • @@ERROR - ለመጨረሻው ትዕዛዝ የስህተት ኮዱን ይመልሳል;
  • @@SERVERNAME - የአካባቢው SQL አገልጋይ ስም;
  • @@VERSION - SQL አገልጋይ ስሪት ቁጥር;
  • @@IDENTITY በአስገባ ክወና ውስጥ ጥቅም ላይ የዋለው የመጨረሻው የቆጣሪ እሴት ነው ( አስገባ).

አሁን እንደ ምሳሌ ሁለት ተለዋዋጮችን በመረጃ ዓይነት INT እንፍጠር ፣ እሴቶችን እንስጥላቸው ፣ የመጀመሪያው የ SET ትዕዛዝን በመጠቀም ፣ ሁለተኛው ደግሞ የ Select ትእዛዝን በመጠቀም ፣ ከዚያ በቀላሉ እነዚህን እሴቶችን እናሳያለን እና እንዲሁም የእሴቱን ዋጋ ያትሙ። @@VERSION ተለዋዋጭ፣ ማለትም የ SQL አገልጋይ ሥሪትን እወቅ።

@TestVar1 INT አውጁ @TestVar2 INT SET @TestVar1 = 1 @TestVar2 = 2 ምረጥ @TestVar1 AS [ተለዋዋጭ 1]፣ @TestVar2 AS [ተለዋዋጭ 2]፣ @@VERSION AS [SQL አገልጋይ ሥሪት]

ጥቅሎች

ጥቅል በT-SQL- እነዚህ የ SQL ትዕዛዞች ወይም መግለጫዎች በአንድ ቡድን ውስጥ የተዋሃዱ እና የ SQL አገልጋይ በአጠቃላይ ያጠናቅራል እና ያስፈጽማቸዋል.

የ SQL አገልጋይ ብዙ ትዕዛዞችን እያስተላለፉ እንደሆነ እንዲረዳ ቁልፍ ቃሉን መግለጽ አለብዎት ሂድወደ ጥቅል ለማጣመር ከሚፈልጉት ሁሉም ትዕዛዞች በኋላ።

የአካባቢ ተለዋዋጮች በተፈጠሩበት ጥቅል ውስጥ ብቻ ነው የሚታዩት፣ ማለትም፣ ጥቅሉ ከተጠናቀቀ በኋላ ተለዋዋጭውን ማግኘት አይችሉም።

እንበል ፣ ከላይ የተጠቀምነው ምሳሌ ወደ ጥቅል ከተጣመረ እና ከዚያ የተለዋዋጮችን እሴቶች ለማግኘት ከሞከርን የሚከተሉትን እናገኛለን።


እነዚያ። የ @TestVar1 ተለዋዋጭ ባለመገለጹ ምክንያት ስህተት እንዳለብን አይተናል።

ሁኔታዎች

እነዚህ ግንባታዎች ቅርንጫፍ መዘርጋትን ያመለክታሉ, ማለትም. አንዳንድ ሁኔታዎች እንደተሟሉ ወይም እንዳልተሟሉ ላይ በመመስረት፣ የT-SQL መግለጫዎች አቅጣጫ ይለወጣሉ።

ካለ…

ይህ ግንባታ በሁሉም የፕሮግራም አወጣጥ ቋንቋዎች ውስጥ አለ ፣ ሁኔታዎች መሟላታቸውን ማረጋገጥን ያካትታል እና ሁሉም ቼኮች ካለፉ ፣ ከዚያ የሚከተለው ትዕዛዝ ይፈጸማል ፣ ካልሆነ ፣ ከዚያ ምንም ነገር አይከናወንም ፣ ግን የ ELSE ቁልፍ ቃሉን መግለጽ ይችላሉ እና ከዚያ በ ውስጥ በዚህ ሁኔታ የተገለጹት ኦፕሬተሮች ከዚህ ቃል በኋላ ይፈጸማሉ.

@TestVar1 INT አውጁ @TestVar2 VARCHAR(20) አዘጋጅ @TestVar1 = 5 ከሆነ @TestVar1 > 0 አዘጋጅ @TestVar2 = "ከ0 የሚበልጥ" ELSE SET @TestVar2 = "ከ 0 ያነሰ" AS @ ዋጋ ምረጥ [TestVar1]

ካለ

ይህ ግንባታ በአንድ ሁኔታ የተገለጹ መዝገቦችን መኖሩን ለመወሰን ያስችልዎታል. ለምሳሌ በሠንጠረዡ ውስጥ የተወሰኑ መዝገቦች መኖራቸውን እና የመጀመሪያው ግጥሚያ ሲገኝ የትዕዛዝ ሂደት ይቆማል የሚለውን ማወቅ እንፈልጋለን። ይህ በመሠረቱ ከCOUNT(*) > 0 ጋር ተመሳሳይ ነው።

ለምሳሌ፣ በሠንጠረዡ test_ሠንጠረዡ ውስጥ መታወቂያ ዋጋ >=0 ያላቸው መዝገቦች መኖራቸውን ማረጋገጥ እንፈልጋለን፣ እና በዚህ መሰረት እንዴት መቀጠል እንዳለብን እንወስናለን።


@TestVar VARCHAR(20) ካለ (ይምረጡ * ከሙከራ_ጠረጴዛ የት መታወቂያ > = 0) አዘጋጅ @TestVar = "መዛግብት አለ" ELSE SET @TestVar = "ምንም መዛግብት የለም" @TestVar AS ምረጥ [መዝገቦች አሉ]

ጉዳይ

ይህ ግንባታ ከተመረጠው መግለጫ ጋር ተያይዞ ጥቅም ላይ ይውላል እና የ IF ግንባታን ተደጋጋሚ አጠቃቀምን ለመተካት የታሰበ ነው። ተለዋዋጭ መፈተሽ በሚፈልጉበት ጊዜ ጠቃሚ ነው ( ወይም መስክ) ለተወሰኑ እሴቶች መኖር.


@TestVar1 INT አውጁ @TestVar2 VARCHAR(20) አዘጋጅ @TestVar1 = 1 ምረጥ @TestVar2 = ጉዳይ @TestVar1 1 ከዚያም "አንድ" ሲሆን 2 ከዚያም "ሁለት" ሌላ "ያልታወቀ" ጨርስ @TestVar2 ን ይምረጡ

ጀምር...መጨረሻ

ይህ ግንባታ የትእዛዞችን እገዳ ለመፍጠር አስፈላጊ ነው, ማለትም. ለምሳሌ፣ ከIF ብሎክ በኋላ አንድ ትዕዛዝ ሳይሆን ብዙ፣ ግን ብዙ፣ ለመፈጸም ከፈለግን በ BEGIN...END ብሎክ ውስጥ ያሉትን ሁሉንም ትዕዛዞች መፃፍ አለብን።

የቀድሞ ምሳሌያችንን እናሻሽለው ( ካለ) ስለዚህ በሠንጠረዡ test_table ውስጥ የመዝገቦች መታወቂያ > = 0 ካሉ፣ ለ @TestVar ተለዋዋጭ እሴት ከመመደብ በተጨማሪ ማሻሻያ እናከናውናለን፣ ማለትም። በተመሳሳዩ ሠንጠረዥ ውስጥ አንዳንድ መረጃዎችን ማዘመን እና እንዲሁም @@ROWCOUNT አለምአቀፍ ተለዋዋጭን በመጠቀም ያዘመንናቸውን የረድፎች ብዛት ያሳያል።


@TestVar1 VARCHAR(20) ይግለጹ @TestVar2 INT SET @TestVar2 = 0 ካለ( ምረጥ * ከሙከራ_ጠረጴዛ የት መታወቂያ > = 0) ጀምር @TestVar1 = "መዝገቦች አሉ" አዘምን test_table SET አምድ1 = 5 የት SET @TestVar2 = @@ROWCOUNT END ELSE SET @TestVar1 = "ምንም መዝገቦች የሉም" @TestVar1 AS ምረጥ [መዝገቦች አሉ]፣ @TestVar2 AS [ረድፎች ተነካ:]

T-SQL Loops

ስለ loops በአጠቃላይ ከተነጋገርን, የትእዛዞችን አፈፃፀም ብዙ ጊዜ ለመድገም ያስፈልጋሉ. በT-SQL ውስጥ አንድ ዙር አለ። ከቅድመ ሁኔታ ጋር እያለ, ይህ ማለት ትእዛዞቹ ይጀመራሉ እና የሉፕ ጅምር ከመጀመሩ በፊት ያለው ሁኔታ እስከተሟላ ድረስ ይደገማል, እንዲሁም የ loop አፈፃፀም ቁልፍ ቃላትን በመጠቀም መቆጣጠር ይቻላል. BREAKእና ቀጥል.


@Cnt INT = 1፣ @result INT = 0፣ @CountRow INT ምረጥ @CountRow = COUNT(*) ከፈተና_ሠንጠረዡ @Cnt እያለ<= @CountRow BEGIN SET @Cnt += 1 SET @result += 1 IF @Cnt = 20 BREAK ELSE CONTINUE END SELECT @result AS [Количество выполнений цикла:]

በዚህ ምሳሌ፣ በመጀመሪያ፣ በእርግጥ፣ ተለዋዋጮችን እናውጃለን ( እኛ ወዲያውኑ Cnt አስጀምረናል እና ውጤቱን በዚህ መንገድ ከ SQL Server 2008 ጀምሮ የተለዋዋጮችን ዋጋዎች ማዘጋጀት ይችላሉ). ከዚያም በሠንጠረዡ ውስጥ ስንት ረድፎች እንዳሉ ለማወቅ እንሞክራለን test_table እና ከዚያ በኋላ በሠንጠረዡ ውስጥ ያሉት የረድፎች ብዛት ከኛ ቆጣሪ የሚበልጥ ወይም እኩል መሆኑን እንፈትሻለን ከዚያም ወደ የሙከራ ምልልሳችን እንገባለን። በ loop ውስጥ የቆጣሪውን ዋጋ እንጨምራለን ፣ ውጤቱን እንጽፋለን እና እንደገና እንፈትሻለን ፣ ቆጣሪችን ቀድሞውኑ እሴቱ 20 ላይ ደርሷል ፣ ከዚያ እንዲያልቅ እናስገድደዋለን ፣ ካልሆነ ፣ ከዚያ የቆጣሪው እሴቱ የበለጠ ወይም እኩል እስኪሆን ድረስ ይቀጥል። በሠንጠረዡ ውስጥ ወደ ረድፎች ብዛት ወይም እስከ 20 ድረስ በሠንጠረዡ ውስጥ ብዙ ረድፎች ካሉ.

አስተያየቶች

በኮዱ ውስጥ ለማብራራት እና ማስታወሻ ለመውሰድ ያስፈልጋሉ, ምክንያቱም ኮዱ ትልቅ እና ውስብስብ ከሆነ, ከጥቂት ጊዜ በኋላ ይህ ለምን እንደሆነ እና ለምን ይህን ወይም ያንን የኮድ ክፍል እንደፃፉ በቀላሉ ሊረሱ ይችላሉ. በT-SQL ውስጥ፣ ነጠላ መስመር (-ጽሑፍ) እና ባለብዙ መስመር አስተያየቶች (/* ጽሑፍ*/) አሉ።


T-SQL ትዕዛዞች

መሄድ

ይህንን ትእዛዝ በመጠቀም በኮዱ በኩል ወደተገለጸው መለያ ማሰስ ይችላሉ። ለምሳሌ ፣ አንድ ዓይነት loop ለመስራት ሲፈልጉ ፣ ግን ያለጊዜው ጥቅም ላይ ሊውል ይችላል።


ማወጅ @Cnt INT = 0 መለያ: --ስያሜውን አዘጋጅ @Cnt += 1 --ከተለዋዋጭ 1 ጨምር @Cnt ከሆነ< 10 GOTO Metka --Если значение меньше 10, то переходим к метке SELECT @Cnt AS [Значение Cnt =]

ጠብቅ

ትእዛዝ የኮድ አፈፃፀምን ለተወሰነ ጊዜ ወይም እስከተወሰነ ጊዜ ድረስ ማቆም ይችላል። መለኪያ መዘግየትየተወሰነውን ርዝመት ለአፍታ ያቆማል, እና TIMEእስከተጠቀሰው ጊዜ ድረስ ሂደቱን ለአፍታ ያቆማል. የመለኪያ እሴቶቹ በቅጹ ውስጥ ተገልጸዋል። hh:mi:ss


@TimeStart ሰአትን አውጅ፣ @TimeEnd time SET @TimeStart = ቀይር (ሰዓት፣ መቀበል())-- ሰዓቱን ፈልግ ዘግይቶ መጠበቅ "00:00:05" -- ለ5 ሰከንድ ቆም አቁም ለ5 ሰከንድ አዘጋጅ @TimeEnd = ቀይር (ሰአት፣ ቀን ያግኙ) ()) -- ሰዓቱን እንደገና እወቅ -- በሰከንዶች ውስጥ ምን ያህል ጊዜ እንዳለፈ ይወቁ DATEDIFF(ss, @TimeStart, @TimeEnd) AS [ሰከንዶች አልፈዋል:]

ተመለስ

ይህ ትዕዛዝ ያለ ምንም ቅድመ ሁኔታ ጥያቄን ወይም አሰራርን ለመውጣት ይጠቅማል። ከሂደት፣ ባች፣ ወይም የመግለጫዎች እገዳ ለመውጣት በማንኛውም ቦታ መመለስ ይቻላል። ከዚህ ትዕዛዝ በኋላ የሚመጡት ነገሮች ሁሉ አይፈጸሙም.


ይግለጹ @Cnt INT = 1, @result varchar(15) /*የ Cnt ዋጋ ከ 0 ያነሰ ከሆነ የሚከተሉት ትዕዛዞች አይፈጸሙም እና [ውጤት:] አምድ አይታዩም */ IF @Cnt< 0 RETURN SET @result = "Cnt больше 0" SELECT @result AS [Результат:]

አትም

የአገልግሎት መልእክት ለመላክ ትዕዛዙን መጠቀም ይችላሉ። አትም. በአስተዳደር ስቱዲዮ ውስጥ ይህ መልእክት በመልእክቶች ትር ውስጥ ይታያል ( መልዕክቶች).


ይግለጹ @Cnt INT = 10, @TestVar varchar(100) IF @Cnt > 0 SET @TestVar = "የተለዋዋጭ Cnt ዋጋ ከ0 ይበልጣል እና ከ" + CAST(@Cnt AS VARCHAR(10)) ElSE SET ጋር እኩል ነው @TestVar = "የተለዋዋጭ Cnt ዋጋ ከ 0 ያነሰ እና እኩል ነው" + CAST(@Cnt AS VARCHAR(10)) PRINT @TestVar

ግብይቶች

ግብይትበተሳካ ሁኔታ የተጠናቀቀ ወይም በአጠቃላይ የተሰረዘ የትዕዛዝ ትእዛዝ ወይም እገዳ ነው። በሌላ አነጋገር፣ በግብይት ውስጥ አንድ ትእዛዝ ወይም መመሪያ ካልተሳካ፣ ከዚያ በፊት የተከናወኑት ነገሮች ሁሉ ይሰረዛሉ፣ ምንም እንኳን የቀደሙት ትዕዛዞች በተሳካ ሁኔታ ቢጠናቀቁም።

ይህ ዘዴ የውሂብ ታማኝነትን ለማረጋገጥ አስፈላጊ ነው, ማለትም. ከአንዱ ሂሳብ ወደ ሌላ ገንዘብ የሚያስተላልፍ አሰራር አለህ እንበል ነገር ግን ገንዘቡ ከሂሳቡ የወጣበት ነገር ግን ወደ ሌላ መለያ ያልደረሰበት ሁኔታ ሊፈጠር ይችላል። ለምሳሌ, ገንዘብ የሚያወጣው የ SQL መመሪያ ሰርቷል, ነገር ግን ገንዘብ ያስቀመጠውን መመሪያ ሲፈጽም, ስህተት ተፈጥሯል, በሌላ አነጋገር ገንዘቡ ተወስዶ በቀላሉ ጠፍቷል. ይህንን ለመከላከል ሁሉም የ SQL መግለጫዎች በግብይት ውስጥ ይፃፋሉ, ከዚያም እንደዚህ አይነት ሁኔታ ከተከሰተ ሁሉም ለውጦች ይሰረዛሉ, ማለትም. ገንዘቡ ወደ ሂሳብዎ ይመለሳል.

በእኛ ሠንጠረዥ ውስጥ ያለውን ነገር እንወቅ (መታወቂያ = መታወቂያ) * ከፈተና_ጠረጴዛ ምረጥ - ግብይቱን ጀምር BEGIN TRAN - መጀመሪያ ሁሉንም ውሂብ አዘምን የፈተና_ሠንጠረዥ SET አምድ1 = አምድ1 - 5 --ከዚያ ረድፎችን ከአዲስ እሴቶች ጋር ብቻ አስገባ ወደ የሙከራ_ሠንጠረዥ ምረጥ አምድ1 ከሙከራ_ሠንጠረዥ --ስህተት ካለ ሁሉንም ነገር ሰርዝ @@ስህተት

በዚህ ምሳሌ፣ ውሂብ ስንጨምር (INSERT) ላይ ስህተት ከነበረን ማዘመን ይሰረዛል።

አያያዝ ላይ ስህተት - ሞክር... CATCH መገንባት

በ T-SQL ኮድ አፈፃፀም ወቅት, ያልተጠበቀ ሁኔታ ሊፈጠር ይችላል, ማለትም. መታከም ያለበት ስህተት። በ SQL አገልጋይ ውስጥ፣ ከ SQL Server 2005 ጀምሮ፣ እንደዚህ ያለ ግንባታ አለ። ይሞክሩ... ያዙስህተቱን መከታተል የሚችል.


ጀምር @TestVar1 INT = 10, @TestVar2 INT = 0, @result INT SET @result = @TestVar1 / @TestVar2 END ሞክር ጀምር ምረጥ ስህተት_NUMBER() እንደ [ስህተት ቁጥር]፣ ስህተት_መልዕክት() እንደ [የስህተት መግለጫ] ያዝ

በዚህ ምሳሌ፣ በዜሮ መከፋፈል የሚከሰትበት ሁኔታ ተከሰተ ( እንደሚያውቁት በ0 መከፋፈል አይችሉም) እና የእኛ ብሎክ ኮድ በTRY ግንባታ ውስጥ ስለተቀጠረ፣ የስህተት ቁጥሩን እና መግለጫውን በቀላሉ የምናገኝበት የተለየ ነገር አግኝተናል።

ይህ ለመሠረታዊ ነገሮች በቂ ነው ብዬ አስባለሁ, ሁሉንም የ T-SQL ቋንቋ ግንባታዎች በበለጠ ዝርዝር ለማጥናት ከፈለጉ መጽሐፌን እንዲያነቡ እመክራለሁ " የT-SQL ፕሮግራመር መንገድ”፣ የ T-SQL ቋንቋ አስቀድሞ በዝርዝር የተብራራበት፣ ጨርሻለሁ፣ መልካም እድል!