You are on page 1of 187

ბათუმის შოთა რუსთაველის სახელმწიფო უნივერსიტეტი

კომპიუტერულ მეცნიერებათა დეპარტამენტი

სასწავლო კურსი: „ინფორმაციის მენეჯმენტი―

(სალექციო და ლაბორატორიული სამუშაოებისათვის)

ავტორი: ასოცირებული პროფესორი ზებურ სურმანიძე

1
მონაცემთა ბაზების მართვის სისტემა - Microsoft SQL Server
შესავალი

Microsoft SQL Server რელაციური მონაცემთა ბაზების (მბ) მართვის კლიენტ-სერვერული


სისტემაა, რომელიც მუშაობს ოპერაციული სისტემა Microsoft Windows-ის გარემოში.
MS SQL Server-ის შემადგენლობაში შედის როგორც სერვერული ასევე კლიენტის ნაწილიც.
მისი სამსახურების შემადგენლობა დამოკიდებულია სერვერის ვერსიაზე. არსებობს MS SQL
Server 2008 შემდეგი ვერსიები:
 Enterprise Edition. ეს მაქსიმალური შესაძლებლობების მქონე ვერსიაა დიდ სისტემებში
გამოყენებისათვის. ამ ვერსიაში მოცემულია 60-ზე მეტი ფუნქცია, რომლებიც სხვა ვერსიებში
მიუწვდომელია. მაგალითად: მონაცემთა შეკუმშვა, სარეზერვო ასლის გაკეთება და ა. შ.
 Standard Edition. განკუთვნილია საშუალო დონის სისტემებში გამოყენებისათვის, სადაც არ
არის Enterprise ვერსიაზე მოთხოვნა. წარმოადგენს ბაზურ შესაძლებლობას ანალიტიკურ და
ანგარიშგებების შექმნის საქმეში.
 Workgroup Edition. ეს ვერსია გამოიყენება კომპანიების ფილიალებში და წარმოადგენს
მონაცემთა მართვის საშუალებებს, ანგარიშგებების შექმნა, დაშორებული სინქრონიზაცია და
მართვა.
 Web Edition. ორიენტირებულია ინტერნეტში მუშაობისათვის. ის შესაძლებლობას იძლევა
კლიენტისთვის დიდმაშტაბიან ვებ დამატებებზე შეღწევისათვის.
 Express Edition. უფასო ვერსიაა. გამოიყენება სწავლებისათვის, სამაგიდო და მცირე
სერვერული დამატებების შექმნისათვის და ა.შ.
 Compact Edition. უფასო ვერსიაა. შეგიძლიათ შექმნათ ავტონომიური ან მარტივად
დაკავშირებული დამატებები მობილური მოწყობილობებისათვის, სამაგიდო პერსონალური
კომპიუტერისათვის და სხვა.

2
ლექცია №1

1.1. სისტემის სერვერული ნაწილი

Microsoft SQL Server რეალიზებულია რამდენიმე დამოუკიდებელი სამსახურის სახით.


თითოეული მათგანი პასუხისმგებელია განსაზღვრული ამოცანის შესრულებაზე.
 სამსახური SQL Server (MS SQL Server) წარმოადგენს მბმ-ს ბირთვს, რომლის
ფუნქციონირებაზე დამოკიდებულია დანარჩენი სამსახურები. ის ასრულებს შემდეგ მთავარ
ფუნქციებს:
o სისტემასთან ერთდროულად მომუშავე მომხმარებლებს შორის კომპიუტერის
რესურსების გადანაწილება;
o მონაცემთა ბაზის ფაილების და ტრანზაქციის ჟურნალის მართვა;
o Transact – SQL ენის ბრძანებების, მოთხოვნების და შენახული პროცედურების
შესრულება, რომლებიც მომხმარებლის მიერ იყო მიცემული;
o სისტემის უსაფრთხოების უზრუნველყოფა;
o პასუხისმგებელია მონაცემთა შეთანხმებულობისა და მთლიანობაზე, რაც
ლოგიკური პრობლემების აღმოფხვრას განაპირობებს.

შენიშვნა: თუ მოცემული სამსახური არაა გაშვებული, მაშინ ვერანაირი მომხმარებელი ვერ


დაუკავშირდება (ჩაერთვება) სერვერს და ვერანაირი ადმინისტრირებადი ამოცანა არ შეიძლება
იყოს შესრულებადი.

 სამსახური SQL Server Agent პასუხისმგებელია ადმინისტრატორის მიერ დაკისრებული


დავალების ავტომატურ შესრულებაზე. იგი ასრულებს განსაზღვრულ მოვლენებზე თვალის
მიდევნებას და შესაბამისად ადარებს ამოცანას (მაგალითად, სარეზერვო ასლის შექმნა,
პრობლემის შემთხვევაში ადმინისტრატორისათვის შეტყობინების გაგზავნა და სხვა).
 სამსახური Full-Text Filter Daemon-ით შესაძლებელია სიმბოლური ინფორმაციის ძებნის
რეალიზება მონაცემთა ბაზის ცხრილების ველებში. ამ სამსახურის დახმარებით შეიძლება
სიტყვებისა და ფრაზების ძებნა;
 სამსახური Integration Services ცვლის DTS SQL Server 2000 სამსახურს და შეუძლია
შეასრულოს შემდეგი:
o Services სამსახურის ყველა პაკეტზე თვალის დევნებას, რომელიც კომპიუტერზე
სრულდება;
3
o Integration Services სამსახურით პაკეტებისა და საქაღალდეების (ფოლდერების)
იერარქიული სახით გამოსახვა, რომლებიც ფიზიკურად ინახება სხვადასხვა ადგილებში (on-line
processing).
 სამსახურით Analysis Servies არის OLAP (On-Line Analytical Processing - ოპერატიულ
ანალიტიკური დამუშავება) სერვერის ბირთვი. მისი საშუალებით შეიძლება მონაცემთა
მილიონობით სტრიქონისა და ათასობით მომხმარებლისათვის ანალიტიკური დამატებების
შექმნა.
 სამსახური Reporting Services წარმოადგენს სერვერულ კომპონენტებს, რომელიც
პასუხისმგებელია ანგარიშგებების გენერაციაზე. მათი წარმოდგენა მომხმარებლებისათვის,
ანგარიშგებებზე სხვადასხვა სერვისული ოპერაციების შესრულება;
 სამსახური SQL Server Bowser განკუთვნილია SQL-სერვერების ქსელში შეღწევის სიის
ფორმირებისათვის.

1.2. სისტემის კლიენტის ნაწილი

MS SQL Server მხარს უჭერს უამრავი კლიენტის სხვადასხვა ტიპებს, რომელთაგან


თითოეული მათგანი შეიძლება მუშაობდეს საკუთარ აპარატურულ და პროგრამულ
პლათფორმაზე.
ადმინისტრირების სტანდარტულ უტილიტებს მიეკუთვნება სხვადასხვა დამატებები.
MS SQL Server კომპლექტში შედის სტანდარტული უტილიტები, რომლებიც შეიძლება
გამოყენებული იყოს სერვერის მუშაობის მართვისათვის და მონაცემთა ბაზის ლოგიკური
სტრუქტურის შექმნისათვის. კლიენტის დამატების შემუშავებისათვის შეიძლება იყოს
გამოყენებული სხვადასხვა საშუალებები, მაგალითად, ვიზუალური დაპროგრამების
საშუალებები Visual Studio .Net 2003-2008, Visual Basic, Delphi და ა.შ.
ადმინისტრირების სტანდარტულ უტილიტას მიეკუთვნება SQL Server Contiguration
Manager.

1.2.1. SQL Server Configuration Manager

ამ უტილეტით შეიძლება:

4
 ზემოთ განხილული MS SQL Server-ის ყველა სამსხურის მუშაობის მართვა. შეიძლება
გაუშვათ, შეაჩეროთ ან მთლიანად გააჩეროთ ზემოთ ჩამოთვლილი სამსახურიდან ნებისმიერი,
აგრეთვე შეუძლია მიუთითოს თუ რომელი მომხმარებლის სახელით გაუშვას ის.
 ქსელური ბიბლიოთეკის პარამეტრების განსაზღვრა, რომელიც MS SQL Server-თან
ურთიერთქმედებას უზრუნველყოფს. შეიძლება აირჩიოთ სერვერზე წვდომის ერთი ან
პირდაპირ რამდენიმე მეთოდი:
o სახელდებული არხები (Named Pipes) - გამოიყენება მაშინ, როცა TCP/IP
პროტოკოლი მიუწვდომელია;
o TCP/IP პროტოკოლების სტეკი (გამოიყენება გულისხმობით) - შეესაბამება
იმტერნეტ ქსელის გამოყენებისათვის;
o გამყოფი მეხსიერება (Shared Memory) - შეესაბამება ლოკალური გამოყენებისათვის,
მაგალითად, ვებ-დამატება და MS SQL Server ერთ კომპიუტერზეა, უზრუნველყოფს მუშაობის
მაქსიმალურ სიჩქარეს;
o ვირტუალური ინტერფეისის ადაპტერი (Virtual Inteface Adapter, VIA) - გამოიყენება
სპეციალური მოწყობილობის გამოყენებით სერვერი-სერვერი ტიპის ჩართვისათვის;
კლიენტს ქსელური ბიბლიოთეკის კონფიგურირება, რომელიც გამოიყენება MS SQL Server-
ზე წვდომისათვის. სერვერზე წვდომის მეთოდის დაყენების შემდეგ, შეიძლება კლიენტების
პროტოკოლების გაკეთება. SQL Server Native Client 10.0 cofiguration კვანძი შეიცავს ორ ჩანართს:
Client protocols Aliases და Aliases (სურ.1.1)

სურ.1.1. SQL Server Contiguration Manager უტილიტის ფანჯარა

MS SQL Server დაკავშირება შეიძლება რამდენიმე პროტოკოლის საშუალებით. მაგალითად,


თავდაპირველად ცდილობს Shared Memory-ით დაკავშირებას, თუ ეს არ შესრულდა, მაშინ -
TCP/IP, ხოლო ბოლოს - Named Pipes დაკავშირებას. ამ პროტოკოლების თანმიმდევრობის
განსაზღვრა შეიძლება Order თვისებით.

5
Aliases კვანძი შესაძლებლობას იძლევა სერვერისათვის ფსევდონიმის შექმნას. ფსევდონიმი
(Alias) არის შეერთების ალტერნატიული სახელი, რომელიც განსხვავებული იქნება სერვერის
სახელისაგან. ფსევდონიმის შექმნისას შეიძლება პროტოკოლისა და პორტის არჩევა, რომლის
საშუალებით შეიძლება სერვერთან დაკავშირება.

6
ლექცია №2

1.2.2. SQL Server Management Studio

Management Studio უტილიტა საშუალებას იძლევა შეასრულოთ შემდეგი:


 MS SQL Server გამართვის (გაწყობის) მართვა;
 უსაფრთხოების სისტემის კონფიგურირება: როლების მართვა, ჩანაწერების აღრიცხვა,
დაშორებული სერვერები;
 მონაცემთა ბაზის სტრუქტურასთან მუშაობა: შექმნა, რედაქტირება და მბ წაშლა, მბ
ელემენტები;
 განრიგის მიხედვით დავალების შესრულების მართვა;
 მიმდინარე აქტიურობის ჩვენება: მიმდინარე მომხმარებლები, რომელი ობიექტები
დაბლოკილია, ინფორმაცია მწარმოებლობაზე.
სერვერთან მუშაობის დაწყების წინ, აუცილებელია მასთან დაკავშირება, შემდეგი
ინფორმაციის მითითებით:
 Server Type - აქ საჭიროა აირჩიოთ, თუ რომელ სამსახურთან აუცილებელია დაკავშირება:
Database Engine, Analysis Services, Report Server ან Integration Services.
 Server Name - საშუალებას იძლევა მიუთითოთ, თუ რომელ სერვერზე განხორციელდება
დაკავშირება. გულისხმობის პრინციპით SQL Server სახელი კომპიუტერის სახელს ემთხვევა.
 Authentication - აუდენტიფიკაციის ხერხი, შეიძლება აირჩიოთ Windous Audentication ან
SQL Server Audentication. Windous Audentication ხერხი იყენებს აღწერის ჩანაწერს, რომლის
თანახმადაც მიმდინარე მომხმარებელმა შეძლო Windous-ში შესვლა (სურ.1.2). SQL Server
Audentication იყენებს უსაფრთხოების საკუთარ სისტემას.

სურ.1.2.SQL-სერვერთან შეერთების ფანჯარა

7
1.2.3. მოთხოვნების რედაქტორი (Query Editor)

იმისათვის, რომ დაწეროთ ახალი მოთხოვნა მონაცემთა ბაზისათვის, აუცილებელია


შეასრულოთ New Query ბრძანება, რომელიც მდებარეობს Management Stydio–ს ინსტრუმენტთა
პანელზე. შედეგად გაიხსნება ახალი ჩანართი, რომელშიც შეიძლება ჩაწეროთ SQL-კოდი
(სურ.1.3).

სამუშო არე

ობიექტთა მიმომხილველი
(გადასვლების პანელი)

სურ.1.3. Management Studio მთავარი მენიუ მოთხოვნების რედაქტორის ფანჯარით

შენიშვნა: მოთხოვნის შესრულებისათვის აუცილებელია QueryExecute (F5) ბრძანების


შესრულება, ხოლო სინტაქსური შემოწმებისათვის შეგიძლიათ გამოიყენოთ QueryParse (Ctrl +
F5) ბრძანება. ამ დროს თვით მოთხოვნა არ სრულდება.

ახლა ნებადართული იქნება შემდეგი:


 სათაური, რომელშიც მითითებულია სერვერის ლოგიკური სახელი, მიმდინარე მონაცემთა
ბაზა და მომხმარებლის სახელი, რომლითაც დაამყარდა დაკავშირება;
 მოთხოვნის არე, რომელიც გამოიყენება მოთხოვნის შეტანისათვის, MS SQL Server-ით
გადაცემული.
 შედეგების არე, რომელშიც მოთხოვნის შესრულების შედეგი აისახება. შედეგების
გამოსახვის ხერხები შეიძლება იყოს შემდეგი:
o Results in Text - შედეგი გამოდის ჩვეულებრივი ტექსტის სახით;
o Results in Grid - შედეგი გამოდის ცხრილის სახით, რომელშიც შეიძლება შეცვალოთ
სვეტის სიგანე, მონიშნოთ საჭირო უჯრედი/სტრიქონი/სვეტი.

8
o Results to File - ანალოგიურია Results in Text-ის, მხოლოდ გამოტანა ხორციელდება
არა ეკრანზე, არამედ ფაილში.
Management Studio საშუალებას იძლევა მოთხოვნების რამდენიმე ფანჯარა გახსნათ და
ერთდროულად იმუშავოთ რამდენიმე მონაცემთა ბაზასთან. თითოეულ ფანჯარაში MS SQL
Server-თან მყარდება საკუთარი დაკავშირება, რომელიც აღწერილია SQL Server Contiguration
Manager-ში, მომხმარებელთა ჩანაწერთა აღწერის სხვადასხვა საფუძველზე და მათი პაროლებით.
ახალი დაკავშირებისათვის გამოიყენება FileNewDatebse Engine Query ბრძანება.
მიმდინარე დაკავშირებისას მოთხოვნის არის შემცველობა შეიძლება შეინახოთ გარე
დამგროვებელზე ფაილის სახით შემდეგი FileSave ბრძანებით.

1.2.4. Object Explorer

Object Explorer საშუალებით ხორციელდება მონაცემთა ბაზაში ნავიგაცია: წვდომადი


ობიექტების დათვალიერება, ცხრილის შიგთავსის ნახვა მოთხოვნის შესრულებით,
ობიექტებისათვის სკრიპტების შექმნა და ა.შ. (სურ.1.4)

სურ.1.4. Object Explorer პანელი

1.2.5. მონაცემთა ბაზის ჩამოშლადი სია

მონაცემთა ბაზა, არჩეული ამ სიაში, გამოიყენება მოთხოვნის რედაქტორში, როგორც


მონაცემთა ბაზა გულისხმობით (სურ.1.5). ამიტომ მოთხოვნის შესრულებამდე, აუცილებელია
დარწმუნდეთ, რომ არჩეულია სასურველი მბ. ეს შეიძლება ან ჩამოშლადი სიიდან, ან SQL
ბრძანების დახმარებით:
USE AdventureWorks2008

9
სურ.1.5. მიმდინარე ბაზის არჩევის ფანჯარა

1.2.6. Reporting Services Configuration

Reporting Services Configuration გამოიყენება ანგარიშგებების სამსახურის კონფიგურა-


ციისათვის. MS SQL Server 2008-ში შედის ჩაშენებული Web-სერვერი, ამიტომ არ არის
აუცილებელი მისი დაყენება და ინტერნეტ-სერვერის IIS (Internet Information Services)
სამსახურის გაწყობა. ანგარიშგებების შექმნისათვის გამოიყენება Report Detinition Language (RDL).

1.2.7. Bulk Copy Program

ბრძანებითი სტრიქონის უტილიტაა, განკუთვნილი MS SQL Server-ში და პირიქით დიდი


მოცულობის ფორმატირებული მონაცემების გადატანისათვის. მაგალითად, ჩვეულებრივი
ტექსტები ფაილის დაფორმატებული მონაცემები შეიძლება ავტომატურად გადატანილი იყოს
MS SQL Server-ის ცხრილში.

1.2.8. MS SQL Server Profiler

შესაძლებლობას იძლევა რეალურ დროში ყველა ბრძანების შესრულებაზე თვალყურის


დევნება. Profiler შეიძლება ნახოს „ვიწრო― ადგილი მონაცემთა ბაზაში, განსაზღვროს მოთხოვნა,
რომელიც დიდხანს მიმდინარეობს და ხშირად შესრულებადი მოთხოვნები.

1.2.9. Sqlcmd უტილიტა

ბრძანებითი სტრიქონის უტილიტაა, რომელის საშუალებას იძლევა SQL-სკრიპტის


შესრულებას. ეს უტილიტა შეიძლება უფრო ეფექტური გამოდგეს ვიდრე Management Studio,
როცა არ მოითხოვება გრაფიკული მომხმარებლის ინტერფეისი.
10
1.2.10. SQL Server Integration Servies (SSIS)

საშუალებას იძლევა მარტივად ამოიღოთ ნებისმიერი წყაროდან მონაცემები OLE DB (Object


Linking and Embedding, Detabase) მექანიზმის გამოყენებით ან NET მონაცემთა პროვაიდერიდან და
მათი MS SQL Server-ის ცხრილში ჩასმა. მონაცემთა გადატანის დროს შეიძლება გამოიყენოთ
ტრანსფორმაცია.

1.2.11. SQL Server Business Intelligence Development Studio

წარმოადგენს Visual Studio განსაკუთრებულ ვერსიას და საშუალებას იძლევა Integration


Services-თვის პაკეტის შექმნა, Reporting Services-თვის ანგარიშგებების და Aralysis Services
პაკეტთან მუშაობა.

1.3. MS SQL Server კონფიგურაცია

MS SQL Server სამსახურის მუშაობის კონფიგურირება შეიძლება ან სპეციალური შენახული


პროცედურებით, რომელიც Management Studio უტილიტაში სრულდება, ან თვით ამ უტილიტის
გრაფიკული ხერხის საშუალებებით. ხერხის არჩევას არა აქვს მნიშვნელობა, ვინაიდან
გრაფიკული ხერხი სისტემურ მონაცემებთან უზრუნველყოფს წვდომას იგივე შენახული
პროცედურებით, ოღონდ უფრო დახვეწილი ფორმით.
Management Studio-ს დახმარებით სამსახურების პარამეტრების შეცვლისათვის
აუცილებელია სერვერის არჩევა და კონტექსტურ მენიუში Properties ბრძანების არჩევა. მიღებულ
დიალოგურ ფანჯარაში შეასრულეთ სერვერის კონფიგურირება.
General ჩანართზე გამოსახულია სისტემის შესახებ მთავარი ცნობები: ოპერაციული
სისტემის ვერსია, მეხსიერების მოცულობა, პროცესორების რაოდენობა და ა.შ. აგრეთვე
სერვერების სამსახურების გაშვების პარამეტრები.
Memory ჩანართი საშუალებას იძლევა MS SQL Server მოქმედების შესრულებისათვის
გამოყოფილი მეხსიერების მართვა. ან მეხსიერების დინამიურად მართვა, ან ფიქსირებული
ზომის დაყენება.
Processors ჩანართი საშუალებას იძლევა მართოთ ის თუ რომელ პროცესორზე შეიძლება SQL
მოთხოვნის შესრულება.
11
Security ჩანართის დახმარებით განისაზღვრება მომხმარებლის აუტენტიფიკაციის ტიპი,
აგრეთვე განისაზღვრება სერვერზე წვდომის აუდიტის პარამეტრები. შეიძლება სერვერი გააწყოთ
განსაზღვრულ ჩანაწერთა აღრიცხვაზე, რომლის მეშვეობითაც გაიშვება MS SQL Server.
Connections ჩანართის საშუალებით შესაძლებელია სერვერზე კლიენტის ჩართვის
კონფიგურირება. თუ პარამეტრი 0-ის ტოლია, მაშინ შესაძლებელია მომხმარებელთა
მაქსიმალური რაოდენობის ჩართვა. სულ 3 276 მომხმარებლის ჩართვა.
Database Settings ჩანართის საშუალებით ახლად შექმნილ მონაცემთა ბაზის გაწყობაა
მითითებული: ინდექსების პარამეტრები და სარეზერვო კოპირების მოწყობილობების მუშაობა.
მონაცემთა ბაზის აღდგენის დრო.
Advaced ჩანართი შეიცავს სერვერის ზოგადი დაყენების საშუალებებს. მაგალითად,
გულისხმობით განისაზღვრება სერვერის შეტყოყობინებისათვის ენა ან რეგულირდება 2000
წლის მხარდაჭერა, რომელიც განსაზღვრავს თუ როგორ წარმოდგება წლის ბოლო ორი ციფრი.
Permissions ჩანართი გამოიყენება სახელებისა და როლების სამართავად, აგრეთვე
საშუალებას იძლევა MS SQL Server მოქმედების შესრულების მართვის უფლებას.

1.3.1. სისტემური მონაცემთა ბაზები

მონაცემთა ბაზა ჩვეულებრივ წარმოგვიდგება როგორც ცხრილებისა და სხვა ობიექტების


ერთობლიობა, როგორიცაა წარმოდგენა, პროცედურების შენახვა და სხვა.
MS SQL Server 2008 შეიცავს ოთხ სისტემურ მონაცემათ ბაზას:
 Master;
 model;
 msdb;
 temdb.
ყველა ეს სისტემური ბაზა საჭიროა სერვერის გამართული (კორექტული) მუშაობისათვის,
რომელიმე მათგანის გარეშე MS SQL Server მუშაობა თითქმის შეუძლებელია.

1.3.2. მბMaster

ნებისმიერი SQL სერვერი შეიცავს მბ Master, რომელშიც ფიქსირდება ყველაფერი, რაც


სერვერზე ხდება. მაგალითად, ახალი მონაცემთა ბაზის შექმნისას მბ Master-ის Sys.databases
ცხრილში დაემატება ჩანაწერები. აგრეთვე ყველა სისტემური შენახული პროცედურები ასევე
12
ინახება ამ მბ-ში. რამდენადაც პრაქტიკულად ყველაფერი რაც კი MS SQL Server-ს აღწერს ინახება
აქ, ამიტომ ეს მბ ძალიან საჭიროა და არ შეიძლება მისი წაშლა.

1.3.3. მბ model

მოცემული მბ გამოიყენება როგორც შაბლონი ახალი მონაცემთა ბაზის შექმნისათვის.


ამრიგად, შეიძლება ამ მბ-ში შეიტანოთ ცვლილებები, რომელიც ახალ შესაქმნელ ბაზაში
სასურველი ცვლილებების შეტანის საშუალებას იძლევა. მაგალითად, შეიძლება დაამატოთ
მომხმარებელთა ჯგუფი, რომელიც გულისხმობით იქნება ყველა ახალ მბ-ში. რადგანაც model
გამოიყენება შაბლონად, ამიტომ ის სერვერს ნორმალური ფუნქციონირებისათვის აუცილებლად
უნდა იყოს. ასევე უნდა აღინიშნოს, რომ ახალი მბ-ის ზომა უნდა იყოს model მბ-ზე არანაკლები.

1.3.4. მბ msdb

ამ მონაცემთა ბაზაში SQL Server Agent ინახავს ყველა სისტემურ დავალებას. მაგალითად,
თუ მოცემულია განრიგად რეზერვირება, მაშინ msdb-ში გამოჩნდება სპეციალური ჩანაწერი.
ანალოგიურად მოცემული მბ გამოიყენება და სხვა MS SQL Server ქვესისტემად, მაგალითად,
SQL Server Inregration Services.

1.3.5. მბtemdb

ეს მბ წარმოადგენს MS SQL Server სამუშაო არეს. მაგალითად, თუ გამოიყენება დიდი


რთული მოთხოვნა, რომლის შესრულებისათვის MS SQL Server-ს დაჭირდება დროებით
ცხრილის შექმნა, მაშინ ასეთი ცხრილი შეიქმნება temdb მბ-ში. იგივე შესრულება თუ
მომხმარებელი თვითონ შექმნის დროებით ცხრილს. თანაც მომხმარებელს შეიძლება ეგონოს,
რომ მბ ქმნის მიმდინარე ბაზაში. სხვა მბ-გან განსხვავებით, msdb და თვითონ წარმოადგენს
დროებითს: ისინი MS SQL Server ყოველი გაშვებისას თავიდან იქმნებიან.

13
ლექცია №3

ზოგადი ცნობები Transact–SQL–ის შესახებ

შესავალი. 1970 წლებში შემუშავდა სპეციალური SEQUEL (Structured English Query Language)
ენა, რომელიც მოგვიანებით SQL ენის სახელწოდებით შეიცვალა. 1986 წელს კომპანია ANSI
(American National Standards Institute) მიიღო ამ ენის პირველი სტანდარტი. ბოლო სტანდარტს
წარმოადგენს ISO SQL:2008.
SQL (Structured Query Language) ენა წარმოადგენს არაპროცედურ ენას, რომელთანაც წვდომა
არამარტო მხოლოდ პროგრამისტებს შეუძლიათ არამედ ჩვეულებრივ მომხმარებლებსაც. მაგრამ
ბოლო დროს ამ ენის სინტაქსი თანდათანობით უფრო რთულდება, ამიტომ უფრო მეტად იგი
პროგრამისტებისათვისა განკუთვნილი, ვიდრე ჩვეულებრივი მომხმარებლებისათვის.
მიუხედავათ იმისა, რომ არსებობს SQL ენის სტანდარტი, მაინც ყოველი მბმს იყენებს ამ ენის
თავის გაფართოებას. ამის მიზეზი არის ის რომ SQL არის არამარტო მოთხოვნების ენა, არამედ
როგორც დაპროგრამების ენა. ამისათვის კი როგორც წესი შემოდის ე. წ. შენახული
პროცედურები.
მონაცემთა ბაზის მართვის სისტემა Microsoft SQL Server იყენებს SQL ენის თავის
გაფართოებას, რომელსაც Transact–SQL ეწოდება. მასში შედის:
 მართვადი კონსტრუქციები;
 ლოკალური ცვლადები;
 დამატებითი ფუნქციები (მათემატიკური, სტრიქონული და სხვა);
 Window-ის აუტენტიფიკაციის მხარდაჭერა.

2.1. მონაცემთა ტიპები

MS SQL Server მხარს უჭერს ყველა ძირითად მარტივ მონაცემთა ტიპს, რომელიც
გამოიყენება დაპროგრამების თანამედროვე ენებში. MS SQL Server 2008-ში დამატებულია
რამდენიმე ახალი მონაცემთა ტიპი, ხოლო არსებულიდან რამდენიმეს გამოყენება არ არის
რეკომენდირებული.
MS SQL Server-ში მონაცემთა ტიპები შეიძლება დაიყოს შვიდ კატეგორიად.

14
2.1.1. მთელი რიცხვები:

 Bit (1 ბაიტი). ერთი ბიტი. იღებს მნიშვნელობას 0, 1 ან NULL. სინამდვილეში ცხრილში


პირველი ბიტი იკავებს ერთ ბაიტს, მაგრამ შემდეგი შვიდი ბიტი ამ ცხრილში იქნება შენახული
იგივე ბაიტში;
 Bigint (8 ბაიტი). 64-თანრიგიანი მთელი რიცხვი, რომელსაც შეუძლია -263–დან +263 -1–მდე
რიცხვების შენახვა;
 Int (4 ბაიტი). მნიშვნელობების დიაპაზონი – 2 147 483 648-დან + 2 147 483 647-მდე;
 SmallInt (2 ბაიტი). მნიშვნელობების დიაპაზონი – 32 768-დან +32 767-მდე;
 TinyInt ( 1 ბაიტი). მნიშვნელობების დიაპაზონი 0-დან 255-მდე.

2.1.2. რიცხვი ფიქსირებული მძიმით (წერტილით):

 Decimal ან Numeric (Decimal(18,0) ან Numeric(18,0)) მნიშვნელობების დიაპაზონი


(მოცემული სიზუსტის წილადი დიაპაზონი) -1038+1-დან +1038-1-მდე.
 Money (8 ბაიტი). ფულის ერთეული დიაპაზონში -263-დან +263-1-მდე. ოთხი მნიშვნელობა
მძიმის შემდეგ.
 SmallMoney(4 ბაიტი). ფულის ერთეულ დიაპაზონში -2 1478,3 648-დან +214748,3647-მდე.

2.1.3. მცურავწერტილიანი (ნამდვილ რიცხვთა დიაპაზონი) რიცხვი:

 Float. დიაპაზონი მნიშვნელობით -1,79E+308-დან +1,79E+308-მდე;


 Real. დიაპაზონი მნიშვნელობით -3,40E+38-დან +3,40E+38-მდე.

2.1.4. თარიღი და დრო:

 DateTime (8 ბაიტი). მნიშვნელობების დიაპაზონი 1753 წლის 1 იანვრიდან 9999 წლის 31


დეკემბრამდე (სამი მეასედი წამი სიზუსტით);
 DateTime2 (6-8 ბაიტი). მონაცემთა ახალი ტიპი, რომელიც უზრუნველყოფს 0,1 მწ-მდე
სიზუსტეს. მნიშვნელობების დიაპაზონი პირველი წლის 1 იანვრიდან 9999 წლის 31
დეკემბრამდე (დროის დიაპაზონი: 00:00:00-დან 23:59:59.9999999-მდე);

15
 SmallDateTime (4 ბაიტი). მნიშვნელობების დიაპაზონი 1900 წლის 1 იანვარიდან 2079 წლის
6 ივნისამდე (ერთი წუთი სიზუსტით);
 DateTimeOffset (8-10 ბაიტი). ანალოგიურია DateTime ტიპის, მაგრამ ინახავს აგრეთვე UTC
(Universal Time Coordinated – უნივერსალური სინქრონული დრო) დროსთან ფართობით
წანაცვლებას;
 Date (3 ბაიტი). ინახავს მხოლოდ თარიღს. მნიშვნელობების დიაპაზონი 1 იანვარი 0001
წლიდან 31 დეკემბერი 9999 წლამდე;
 Time(3–5 ბაიტი). ინახავს მხოლოდ დროს 0,1 მწმ სიზუსტით.

2.1.5. სიმბოლური სტრიქონი (სტრიქონული ტიპი):

 Char. ფიქსირებული სიგრძის სტრიქონი. სტრიქონის მაქსიმალური სიგრძეა 8000


სიმბოლო;
 VarChar. ცვლადი სიგრძის სტრიქონი. სტრიქონის მაქსიმალური სიგრძეა 8000 სიმბოლო,
მაგრამ „Max‖ საკვანძო სიტყვების გამოყენებისას შეუძლია შეინახოს 231 ბაიტამდე;
 Text. გამოიყენება დიდი სტრიქონების შენახვისათვის, ამჟამად varchar(max) გამოიყენება
Text-ის ნაცვლად;
 Nchar. იუნიკოდში ფიქსირებული სიგრძის სტრიქონი. სტრიქონის მაქსიმალური სიგრძეა
4000 სიმბოლო;
 NVarChar. იუნიკოდში ცვლადი სიგრძის სტრიქონი. სტრიქონის მაქსიმალური სიგრძეა
4000 სიმბოლო, მაგრამ „Max‖ საკვანძო სიტყვას გამოყენებისას შეუძლია შეინახოს 231 ბაიტამდე;
 Ntext. Text ტიპის ანალოგიურია. მაგრამ გაკეთებულია იუნიკოდში მუშაობისათვის.
ამჟამად რეკომენდირებულია nvarchar(max)გამოიყენება.

2.1.6. ორობითი მონაცემები:

 Binary. საშუალებას იძლევა შეინახოთ ორობითი მონაცემები ზომით 8000 ბაიტამდე;


 VarBinary. ცვლადი სიგრძის მონაცემთა ტიპი, რომელსაც შეუძლია შანახვა 8000 ბაიტამდე.
მაგრამ „Max‖ საკვანძო სიტყვას გამოყენებისას შეუძლია შენახვა 231 ბაიტამდე;
 Image. გამოიყენება დიდი მოცულობის მონაცემების შესანახად. ამჟამად
რეკომენდირებულია Varbinary (max) გამოიყენება.

16
2.1.7. სხვა ტიპის მონაცემები:

 Table. მონაცემთა განსაკუთრებული ტიპი, რომელიც გამოიყენმება ცხრილების დროებით


შესანახად და ფუნქციებში პარამეტრის ნაცვლად გამოყენებისათვის;
 HiererchvID. გამოიყენება იერარქიულ სტრუქტურაში მდგომარეობის წარმოდგენისათვის;
 Sql_variant. მონაცემთა ტიპი, რომელიც სხვადასხვა ტიპის მონაცემების მნიშვნელობებს
ინახავს, რომელსაც MS SQL Server მხარს უჭერს;
 XML. საშუალებას იძლევა XML-მონაცემების შენახვისათვის;
 Cursor (1 ბაიტი). მონაცემთა ტიპი ცვლადების ან შენახული პროცედურების გამოსატანი
პარამეტრებისათვის, რომელიც შეიცავს კურსორზე მიმართვას;
 Timestamp/rowversion (8 ბაიტი). მონაცემთა ისეთი ტიპია, რომელიც მონაცემთა ბაზაში
ავტომატურად აფორმირებს უნიკალურ ორობით რიცხვს. ამ ტიპის მონაცემის მნიშვნელობა მბ
ავტომატურად გენერირდება ჩანაწერის შეტანისას ან შეცვლისას;
 UniqueIdentifier (16 ბაიტი). წარმოადგენს თავად GUID (Special Globally UniquIdentifier).
მოცემული მნიშვნელობის უნიკალურობა გარანტირებულია.

2.2. Transact-SQL-ში ცვლადები

შესავალი. მონაცემთა ბაზის ნებისმიერ ობიექტს ბაზის შიგნით უნდა ჰქონდეს უნიკალურ
სახელი. სახელზე დაყრდნობით ხორციელდება ამ ობიექტზე მიმართვა. ობიექტების სახელებს
იდენტიფიკატორებს უწოდებენ. Transact-SQL ობიექტის დასათაურებაზე გარკვეულ
შეზღუდვებს აწესებს:
 სახელის პირველი სიმბოლო უნდა იყოს ლათინური (A-Z, a-z) ალფაბეტის, ან @,# ან _
სიმბოლოები, ანუ დაუშვებელია ციფრებისა და სხვა სპეციალური სიმბოლოების გამოყენება.
სახელის დანარჩენს ნაწილში შეიძლება ალფაბეტის ნებისმიერი სიმბოლოს ციფრების და
რამდენიმე სპეციალური სიმბოლოების გამოყენება;
 ჩვეულებრივი ობიექტის სახელის საერთო სიგრძე არ უნდა აღემატებოდეს 128 სიმბოლოს,
ხოლო დროებითი ობიექტებისათვის - 116 სიმბოლოს;
 სახელის შიგნით აკრძალულია ჰარის (ცარიელი სიმბოლოს), ფრჩხილების, შემდეგი
სიმბოლოების ˜, !,%, ^, & და სხვათა გამოყენება;
 ობიექტის სახელი არ უნდა ემთხვეოდეს დარეზერვირებულ სიტყვას და უკვე არსებული
ობიექტის სახელს;
17
 თუ ობიექტის სახელი შეიცავს ჰარს (ცარიელ სიმბოლოს) ან ემთხვევა დარეზერვირებულ
სიტყვას, მაშინ ის აუცილებლად უნდა ჩაისვას [ ] კვადრატულ ფრჩხილებში.
შენიშვნა: Transact-SQL წარმოადგენს CASE-არამგძნობიარე ენას, ანუ სიმბოლოების
რეგისტრს არ განასხვავებს.
ლოკალური ცვლადების სახელები უნდა აკმაყოფილებდეს ობიექტის დასათაურების
ჩამოთვლილ წესებს და ყოველთვის უნდა იწყებოდეს @ სიმბოლოთი. ცვლადის მოქმედების არე
იზღუდება ოპერატორების პაკეტით ან პროცედურით, რომლითაც ის იქნა გამოცხადებული.

2.2.1. ცვლადების გამოცხადება

ბრძანების სინტაქსია (კვადრატულ ფრჩხილების შიგნით აღწერილი სინტაქსი


არააუცილებელი ელემენტია):

DECLARE @ცვლადის_სახელი მონაცემთა_ტიპი [ ,...n]

ერთი ცვლადის გამოცხადების მაგალითი:


DECLARE @sum int

რამდენიმე ცვლადის გამოცხადების მაგალითი:


DECLARE @temp int, @count float

2.2.2. მნიშვნელობის მინიჭება

ბრძანების სინტაქსია:
SET @ცვლადის_სახელი = გამოსახულება

მნიშვნელობის მინიჭების მაგალითი:


SET @sum = 0

MS SQL Server 2008 ვერსიაში გამოჩნდა შემდეგი ახალი შეტანის წესი.


 ცვლადისგამოცხადებისას შეიძლება მნიშვნელობის მინიჭებაც,
მაგალითად:
18
DECLARE @Counter int = 0

 არითმეტიკული კონსტრუქციის ჩაწერის მოკლე ფორმებისათვის გამოჩნდა შემდეგი


ოპერატორები +=, -=, *=,/=.

2.3. Transact-SQL-ის მართვადი კონსტრუქციები

2.3.1. ბრძანებების დაჯგუფება

ორი ან მეტი ბრძანების ერთიან ბლოკად დაჯგუფება შესაძლებელია კონსტრუქციით:


BEGIN
...
END

ასეთი დაჯგუფება გამოიყენება პირობით და ციკლურ კონსტრუქციებში.

2.3.2. განშტოების კონსტრუქცია

ამა თუ იმ დაჯგუფებული ბრძანებების შესრულება, რომელიც დამოკიდებულია რაიმე


პირობის შესრულება არ შესრულებაზე რეალიზდება შემდეგი კონსტრუქციის დახმარებით:

IF<პირობა>
ოპერატორი
[ELSE
ოპერატორი]

ბრძანებების არქონისას, შესაბამისი პირობის არ შესრულებისას, ELSE საკვანძო სიტყვა


შეიძლება არ მიუთითოდ.
განსაკუთრებით აღსანიშნავია NULL (ცარიელი მნიშვნელობა) მნიშვნელობის შემოწმება.
ჩვეულებრივი შედარების ნაცვლად: IF @myvar = NULL, გამოიყენება IS ოპერატორი: IF @myvar =
IS NULL.

19
2.3.3. CASE კონსტრუქცია

ანალოგიურია დაპროგრამების ენებში CASE ოპერატორისა. MS SQL Server 2008-ში CASE


ოპერატორს აქვს გამოყენების ორი შესაძლო ვარიანტი.

1. შესატანი გამოსახულებით:
CASE <შესატანი გამოსახულება>
WHEN <გამოსახულება when> THEN <შედეგი>
[...]
[ELSE <შედეგი>]
END

2. შეასატანი გამოსახულების გარეშე:

CASE
WHEN <ლოგიკური გამოსახულება> THEN <შედეგი>
[...]
[ELSE <შედეგი>]
END

CASE ოპერატორი გამოიყენება, როგორც წესი, ჩანაწერთა ძებნისათვის.

2.3.4. ციკლის კონსტრუქცია

Transact-SQL მხარს უჭერს ერთადერთ ციკლის ტიპს. WHILE ციკლის სინტაქსი ასე
ჩაიწერება:
WHILE პირობა
ოპერატორი
[BREAK | CONTINUE]

შენიშვნა: ვერტიკალური | ხაზი ნიშნავს ―ან„. ამ მაგალითში შეიძლება მითითება იყოს ან


BREAK-ზე ან CONTINUE-ზე.
20
ციკლი მანამდე განმეორდება, სანამ პირობა არ იქნება ჭეშმარიტი. ციკლი შეიძლება
იძულებით გააჩეროთ, თუ ციკლში შეასრულებთ BREAK ბრძანებას. თუ გსურთ ციკლის თავიდან
დაწყება, ისე, რომ ციკლის მუშაობა არ იყოს დამთავრებული, მაშინ აუცილებელია შეასრულოთ
CONTINUE ბრძანება.

2.3.5. WAITFOR კონსტრუქცია

ზოგიერთ შემთხვევაში მოითხოვება ამა თუ იმ ბრძანების შესრულების გადადება. ამ


მიზნისათვის შეიძლება გამოიყენოთ WAITFOR ოპერატორი. ამ ბრძანებას აქვს შემდეგი
სინტაქსი;
WAITFOR DELAY <'time'> | TIME <'time'>

თუ გამოიყენება DELAY პარამეტრი, მაშინ ეთითება თუ რამდენი დროა აუცილებელია MS


SQL Server მოცდისათვის. მაქსიმალური შესაძლო ლოდინია (მოცდა) 24 საათი. გამოყენების
მაგალითი: WAITFOR DELAY '01:00', რომელიც ერთი საათით გააჩერებს მუშაობას (შესრულებას).
თუ გამოიყენება TIME პარამეტრი, მაშინ შესრულება შეწყდება მიცემული დროის
დადგომისას. გამოყენების მაგალითი: WAITFOR TIME '01:00' - კოდის შესრულება შეწყდება
ღამის პირველ საათზე.

2.3.6. TRY/CATCH ბლოკი

მოცემული კონსტრუქცია შეიძლება გამოიყენოთ განსაკუთრებულ შემთხვევაში. პირველად


ეს კონსტრუქცია გამოჩნდა MS SQL Server 2005-ში.
MS SQL Server-ში TRY/CATCH ბლოკი მუშაობს ისე, როგორც სხვა პროგრამირებულ ენებში.
გამოიყენება შემდეგი სინტაქსი:

BEGIN TRY
{ <SQL გამოსახულება> }
END TRY
BEGIN CATCH
{ <SQL გამოსახულება> }
END CATCH [ ; ]

21
BEGIN TRY... END TRY ბლოკში სრულდება პოტენციურად სახიფათო ბრძანებები, თუ ამ
შემთხვევაში მოხდება შეცდომა 11-19 დონეზე, მაშინ შესრულება გადაეცემა CATCH ბლოკს.
შეცდომების დონეები:
 1 – 10 საინფორმაციო შეტყობინება. მაგალითად, აგრეგირების ფუნქციის შესრულებისას
NULL მნიშვნელობის აღმოჩენა.CATCH ბლოკს მოცემული შეცდომა არ გადაეცემა, ამიტომ
შეცდომის შესახებ ინფორმაციის მიღებისათვის გამოიყენება @@ERROR ფუნქცია;
 11 – 19 ფარდობითად სერიოზული შეცდომა. მაგალითად, გარე გასაღებზე შეზღუდვის
დარღვევა;
 20 – 25 ძალიან სერიოზული შეცდომა. ეს შეცდომა არის სისტემურ დონეზე, ამიტომ
კოდით არ შეიძლება მისი წარმოშობის დანახვა. ასეთი შეცდომა წყვეტს მიმდინარე შეერთებას
და აჩერებს ბრძანებების შესრულებას.

2.3.7. კომენტარები

არსებობს ორი სახის კომენტარი:


 ერთსტრიქონიანი - ამ შემთხვევაში იგნორირდება ტექსტი კომენტარის სიმბოლოდან
მარჯვნივ: -- (ორმაგი ხაზი);
 მრავალსტრიქონიანი - იგნორირდება ტექსტი, რომელიც ჩაწერილია ორ წყვილ სიმბოლოს
შორის: /*...*/.

2.4. ფუნქციები Transact-SQL-ში

MS SQL Server მონაცემთა დამუშვების გამარტივებისა და სისწრაფისათვის აქვს რამდენიმე


ჩაშენებული ფუნქცია. განასხვავებენ სამი ტიპის ფუნქციებს:
 ჩანაწერთა ნაკრების (კომპლექტის) ფუნქციები – შესრულების შედეგს წარმოადგენს
ობიექტი, რომელიც შეიძლება გამოყენებული იყოს, როგორც მონაცემთა ცხრილი;
 აგრეგირებული ფუნქციები – შედეგს წარმოადგენს მიცემული ატრიბუტის ერთადერთ
მნიშვნელობას რომელიმე სიმრავლის ჩანაწერებიდან;
 სკალარული ფუნქციები – შედეგს წარმოადგენს მიცემული ატრიბუტის ერთ
მნიშვნელობას მკაცრად განსაზღვრული არგუმენტების ნაკრებიდან.

2.4.1. სკალარული ფუნქციები


22
გამოყოფენ სკალარული ფუნქციების შემდეგ კატეგორიებს: მათემატიკური, სტრიქონული,
თარიღთან მუშაობის, კონფიგურირების და სისტემური.

2.4.1.1. მათემატიკური ფუნქციები

მათემატიკური ფუნქციების უმრავლესობის მიერ დაბრუნებულ მონაცემს იგივე ტიპი აქვს,


რაც დავდაპირველ მონაცემს ჰქონდა. მაგალითად, კუთხის სიდიდის გადაყვანა გრადუსიდან
რადიანში Radians(90) შემთხვევში შედეგი ერთის ტოლია, რაც არასწორია ვინაიდან ფუნქციის
არგუმენტად გამოყენებულია მთელი რიცხვი. სწორი ჩანაწერია: Radians (90.0).
Abs (გამოსახულება) – გამოსახულების აბსოლუტური მნიშვნელობის გამოთვლა. შეიძლება
გამოიყენოთ როგორც მთელი რიცხვები ასევე არამთელი რიცხვები;
IsNumeric (გამოსახულება) – ამოწმებს აქვს თუ არა მითითებულ გამოსახულებას რიცხვითი
ტიპი. შედეგი ერთის ტოლია, თუ გამოსახულებას აქვს რიცხვითი ტიპი, თუ არა – ნულის;
Rand () – აბრუნებს შემთხვევით მნიშვნელობას სისტემურ დროზე დაყრდნობით 0–დან 1–
მდე დიაპაზონში;
Floor (გამოსახულება) – მითითებული მნიშვნელობის დამრგვალება უახლოეს მინიმალურ
მთელ რიცხვამდე;
Ceiling (გამოსახულება) – აბრუნებს უახლოეს მთელ რიცხვს, რომელიც მეტია ან ტოლია
მიცემულზე;
Power (გამოსახულება, ხარისხი) – გამოსახულების ახარისხება. მიღებული მნიშვნელობის
ტიპი ემთხვევა თავდაპირველ ტიპს;
Sqrt (გამოსახულება) – კვადრატული ფესვის გამოთვლა.

2.4.1.2. სტრიქონული ფუნქციები

Ascii (სტრიქონი) – უბრუნებს სტრიქონის ყველაზე მარცხნივ მდგომ სიმბოლოს ASCII–


კოდს;
Char (გამოსახულება) – უბრუნებს სიმბოლოს, რომლის ASCII–კოდი შეესაბამება
მითითებულ რიცხვით გამოსახულებას;
Len (სტრიქონი) – ითვლის სტრიქონის სიგრძეს სიმბოლებში;
Ltrim (სტრიქონი), Rtrim (სტრიქონი) – შესაბამისად წაშლის საწყის და ბოლო ჰარს;
23
Left (სტრიქონი, რიცხვი), Right(სტრიქონი, რიცხვი) – აბრუნებს სტიქონის მითითებულ
სიმბოლოთა რაოდენობას, დაწყებულს შესაბამისად სტრიქონის მარცხენა და მარჯვენა მხრიდან;
SubString (სტრიქონი, დასაწყისი, სიგრძე) – სტრიქონისათვის აბრუნებს მითითებული
სიმბოლოდან დაწყებული, მითითებული სიგრძის ქვესტრიქონს;
CharIndex (სტრიქონი1, სტრიქონი2 [, დასაწყისი]) – სტრიქონი1 ქვესტრიქონის ძებნა
სტრიქონ სტრიქონი2-ში. აბრუნებს პირველი სიმბოლოს რიგით ნომერს, რომლითაც იწყება
პირველი შემავალი ქვესტრიქონი სტრიქონში. დამატებით შეიძლება მიუთითოთ სასტარტო
პოზიციები, რომლითაც დაიწყება ძებნა;
Stuff (სტრიქონი1, დასაწყისი, სიგრძე, სტრიქონი2) – მითითებულით დაწყებულს წაშლის
განსაზღვრული რაოდენობის სიმბოლოს სტრიქონი1 და შეცვლის მათ ახალი სტრიქონი2-ით;
Replace (სტრიქონი1, სტრიქონი2, სტრიქონი3) – ცვლის ყველა შემავალ სტრიქონს
სტრიქონი2-ს თავდაპირველ სტრიქონი1 სტრიქონში სტრიქონი3-ით;
Reverse (სტრიქონი) - აბრუნებს სტრიქონს, რომელშიც სიმბოლოები ჩაწერილი იქნება
თავდაპირველი სტიქონის უკუთანრიგიდ;
Str(რიცხვითი გამოსახულება, სიგრძე, რაოდენობა) - აბრუნებს სტრიქონული ტიპის
(varchar) მონაცემს, რომლის სიგრძე (სიმბოლოთა რაოდენობა) განისაზღვრება მეორე
არგუმენტით, ხოლო ათწილადი მძიმის შემდეგ ნიშანთა რაოდენობა - მესამე არგუმენტით.

2.4.1.3. თარიღებთან მუშაობის ფუნქციები

GetDate ()- აბრუნებს მიმდინარე სისტემურ დროს;


IsDate (გამოსახულება) - ამოწმებს გამოსახულების სისწორეს შეესაბამება თუ არა თარიღის
შეტანა ერთ-ერთ შესაძლო ფორმატს;
Day (თარიღი), Month(თარიღი), Year(თარიღი) - აბრუნებს დღეს, თვეს და წელს
მითითებული თარიღიდან;
DateName (თარიღის ნაწილი, გამოსახულება) - მითითებული თარიღიდან გამოყოფს
თარიღის ნაწილს და აბრუნებს მას სიმბოლურ ფორმატში;

შენიშვნა: თარიღის ნაწილი (ტიპი) არგუმენტისათვის (ფორმატისათვის) გამოიყენება: year –


წელი (შემოკლებით yy ან yyyy), quarter – კვარტალი (შემოკლებით qq ან q), month – თვე
(შემოკლებით mm ან m), day – დღე (შემოკლებით dd ან d), week – გასულ კვირათა რაოდენობა
(შემოკლებით wk ან ww), dayofyear - გასულ დღეთა რაოდენობა (შემოკლებით dy ან y), weekday

24
– კვირის დღე (შემოკლებით dw, w), hour – საათი (შემოკლებით hh), minute – წუთი (შემოკლებით
mi ან n), second – წამი (შემოკლებით ss ან s), millisecond – მილიწამი (შემოკლებით ms),
microsecond – მილიწამი (შემოკლებით mcs), nanosecond – მილიწამი (შემოკლებით ns) და სხვა;

DatePart (თარიღის ნაწილი, გამოსახულება) - გამოყოფს თარიღიდან მითითებულ ნაწილს


და აბრუნებს მას რიცხვით ფორმატში;
DateAdd (თარიღის ნაწილი, რიცხვი, თარიღი) - მითითებულ თარიღს ამატებს რიცხვს,
რომლის ტიპიც მითითებულია პირველ პარამეტრში;
DateDiff (თარიღის ნაწილი, საწყისი, ბოლო) - აბრუნებს თარიღის ნაწილის მითითებული
ტიპისათვის თარიღის ნაწილებს შორის სხვაობას.

2.4.1.4. კონფიგურირების ფუნქციები

აბრუნებს ინფორმაციას MS SQL Server მიმდინარე კონფიგურაციის შესახებ. მაგალითად:


@@Version -აბრუნებს სერვერის პროცესორისათვის ინფორმაციას თარიღზე, ვერსიაზე და
ტიპზე;
@@ServerName - ლოკალური MS SQL Server სიმბოლური სახელი;
@@Max_Connections - მაქსიმალური ნებადართული რაოდენობა ერთდროულად სერვერზე
ჩართვის.

2.4.1.5. სისტემური ფუნქციები

აბრუნებს ინფორმაციას მნიშვნელობებზე, ობიექტებზე და MS SQL Server მიმდინარე


პარამეტრებზე.
DataLength (გამოსახულება) - აბრუნებს რიცხვს, რომელიც შეესაბამება ბაიტთა იმ
რაოდენობას, რომელიც აუცილებელია გამოსახულების შედეგის შენახვისათვის;
@@Error - ბოლო შეცდომის კოდი, რომელიც მოხდა მიმდინარე შეერთებისას. თუ შეცდომა
არაა, მაშინ შედეგი ნულის ტოლია;
Host_Name() - ქსელში კომპიუტერის სიმბოლური სახელი, რომელზეც სრულდება ბრძანება;
System_User დაSession_User - შესაბამისად აბრუნებს მომხმარებლის შესვლისათვის
საღრიცხვო ჩანაწერის სახელს და მიმდინარე მონაცემთა ბაზის მომხმარებლის სახელს;

25
@@IDLE - განსაზღვრავს მილიწამების რაოდენობას, რომელიც გავიდა MS SQL Server ბოლო
გაშვების დროდან;
NewID() - აგენერირებს UniqueIdentifier ტიპის ახალ მნიშვნელობას;
Permissions ([ObjectID[, ‗column‘]]) - აბრუნებს მიმდინარე მომხმარებლისათვის წვდომის
უფლებებზე ინფორმაციას. ObjectID არგუმენტი მიუთითებს მონაცემთა ბაზის ობიექტის
იდენტიფიკაციის ნომერს. მისი სახელით ობიექტის იდენტიფიკაციის ნომერის მიღებისათვის
გამოიყენება Object_ID ('სახელი‘') ფუნქცია;
მოცემული ფუნქციის შედეგი არის 32-ბიტიანი მნიშვნელობა, რომლის თითოეული ბიტი
შეესაბამება წვდომის ამა თუ იმ წესს. თუ ამ ბიტის მნიშვნელიბა ტოლია 1-ის, მაშინ ობიექტზე
წვდომა ნებადართულია.
იმისათვის, რომ შეამოწმოთ რომელიმე ცხრილის ველზე წვდომა, აუცილებელია
მიუთითოთ ამ ცხრილის მონაცემთა იდენტიფიკაციის ნომერი და ‗column‘ არგუმენტში
მიუთითოთ ამ ველის სახელი.

2.5. Management Studio კოდის გამართვა

MS SQL Server 2008-ში გამოჩნდა შესაძლებლობა SQL-კოდის გამართვის ნაბიჯ-ნაბიჯ


შესრულების გზით. ამისათვის არსებობა Debug – Step Into (F11) და Debug – Step Over (F10)
ბრძანებები. Debug – Toggle Breakpoint (F9) ბრძანება აყენებს გაჩერების წერტილს, სადამდეც
მიმდინარეობს კოდის შესრულება. კოდის გაჩერების დროს მისაწვდომია შემდეგი ფანჯრები:
 Locals – ავტომატურად შეიცავს ყველა ლოკალური პარამეტრის სიას და გიჩვენებთ მათ
მიმდინარე მნიშვნელობებს;
 Watch – საშუალებას გაძლევთ ხელით დაამატოთ ცვლადები მათი მნიშვნელობების
თვალთვალისათვის;
 Callstack - გიჩვენებთ ფუნქციის გამოძახების სტეკს.
სურ.2.1. მოცემულია პროცესის დროს გამართვა

26
სურ.2.1. Management Studio-ში გამართვის ფანჯარა.
ყვითელი ისარი მიუთითებს მიმდინარე გამოყენებულ სტრიქონს;
წითელი ბურთულა - გაჩერების წერტილს.

27
ლექცია №4

გრაფიკული ინტერფეისი - Management Studio

3.1. მონაცემთა ბაზის შექმნა, სახელის შეცვლა და წაშლა

შესავალი. მონაცემთა ბაზის მართვის სისტემა MS SQL Server საშუალებით შესაძლოა


მონაცემთა ბაზის შექმნის ორი ვარიანტი: გრაფიკული ინტერფეისის Managament studio–ს ან SQL
ბრძანების გამოყენებით (ეს უკანასკნელი განხილული იქნება მოგვიანებით).
მონაცემთა ბაზის შექმნა - ეს პროცესია ფაილზე სახელის მითითების, ზომების
განსაზღვრის და მონაცემთა ბაზის ფაილების განთავსება, აგრეთვე ტრანზაქციის ჟურნალის
ფაილის პარამეტრების განსაზღვრის.
შეიძლება გამოიყოს MS SQL Server მონაცემთა ბაზებში სამი ტიპის ფაილი:
1. მონაცემთა პირველადი ფაილი. როგორც წესი, გამოიყენება MDF გაფართოება.
ნებისმიერ მონაცემთა ბაზაში არის ერთი პირველადი ფაილი, რომელიც შეიცავს მონაცემებს და
მონაცემთა ბაზის დანარჩენი ფაილების განლაგებას;
2. მონაცემთა მეორადი ფაილი. როგორც წესი, გამოიყენება NDF გაფართოება.
მეორედად ითვლება ნებისმიერი ფაილი გარდა პირველადისა და ჟურნალების ფაილებისა.
მონაცემთა ბაზა შეიძლება არ შეიცავდეს არცერთ მეორად ფაილს;
3. ჟურნალების ფაილები. როგორც წესი, გამოიყენება LDF გაფართოება. ნებისმიერ
მონაცემთა ბაზაში არსებობს ჟურნალის ერთი ფაილი მაინც. ტრანზაქციის ჟურნალი შეიცავს
ცვლილებების შესახებ ცნობებს, რომელიც განხორციელდება მონაცემთა ბაზაში, ანუ ნებისმიერი
ტრანზაქციის შესრულებისას ამ ჟურნალში შეიტანება ცნობები. დროდადრო ამ ჟურნალის
მოცულობა იზრდება, ამიტომ საჭიროა მის ზომებზე დაკვირვება. ტრანზაქციის ჟურნალის
მთავარი დანიშნულებაა მონაცემთა მთლიანობის უზრუნველყოფა. მას შეუძლია მონაცემთა
ბაზაში ცვლილებების გაუქმება.
ადმინისტრირების გაადვილებისათვის და დატვირთვის გადანაწილებისათვის ფაილები
შეიძლება შეიტანოთ ფაილთა ჯგუფში, რომელიც იყოფა ორ ნაწილად:
1. პირველადი ფაილური ჯგუფი. მასში შედის ყველა პირველადი ფაილი და ყველა ის
ფაილი, რომლებიც არ იქნა შეტანილი სხვა ჯგუფში.

28
2. სამომხმარებლო ფაილების ჯგუფი. ეს ნებისმიერი ჯგუფია, რომლებიც
მომხმარებლის მიერ იქნა შექმნილი მონაცემთა ბაზაში.
ჟურნალის ფაილები არ შედის არცერთ ფაილურ ჯგუფში, ისინი მუშავდება ცალკე
ჩვეულებრივი ფაილებისაგან.
ამრიგად, თითოეული მონაცემთა ბაზა მინიმუმ ორი ფაილისაგან შედგება: ერთი
მონაცემთა ბაზისათვის და ერთი ტრანზაქციების ჟურნალისათვის.
მონაცემთა ბაზის ყველა ფაილის ზომა შეიძლება ავტომატურად გაიზარდოს. ეს
შესაძლებლობა ფაილის შექმნის დროს განისაზღვრება.
მონაცემთა ბაზაში გამოყენებულ თითოეულ ფაილს ორი სახელი აქვს:
1. ფაილის ლოგიკური სახელი (Logical File Name). ის გამოიყენება Transact-SQL
ბრძანებებში კონკრეტულ ფაილთან მიმართვისათვის.
2. ფაილის სახელი ოპერაციულ სისტემაში (OS File Name). ეს არის ფაილის ფიზიკური
სახელი. ამ სახელით ინახება ფაილი დისკზე.

შენიშვნა: სერვერზე მონაცემების შენახვის ძირითადი ერთეულია გვერდი (page). მონაცემთა


ბაზაში მონაცემების ფაილისთვის (.mdf ან .ndf) გამოყოფილი დისკური სივრცე ლოგიკურად
იყოფა გვერდებად, რომლებიც უწყვეტად ინომრება 0-დან n-მდე. შეტანა-გამოტანის ოპერაციები
სრულდება გვერდის დონეზე, ანუ სერვერი წერს და კითხულობს მონაცემების მთელ გვერდებს.

მონაცემთა ბაზის შექმნა შეიძლება Microsoft SQL Server Management Studio უტილიტის
ინსტრუმენტის (ან Transact-SQL შესაბამისი კოდის) საშუალებით.
სერვერთან მუშაობის დასაწყებად და Management Studio საშუალებით ახალი მონაცემთა
ბაზის შექმნისათვის, მონაცემთა ბაზაზე სახელის შეცვლისათვის და მონაცემთა ბაზის
წაშლისათვის საჭიროა:
1. შეასრულეთ StartAll ProgramsMicrosoft SQL Server 2008Microsoft SQL Server
Management Studio ბრძანება. გაიხსნება Microsoft SQL Server Management Studio ფანჯარა (სურ.3.1).
Server name ველში ჩანს სერვერის სახელი. საჭიროების შემთხვევაში შეგაქვთ სხვა სერვერის
სახელი. Authentication ველში ჩანს Windows-ის აუტენტიფიცირების რეჟიმი - Windows
Authentication. საჭიროების შემთხვევაში ირჩევთ SQL სერვერის აუტენტიფიცირების რეჟიმს –
Microsoft SQL Server Authentication (Login ველში შეგაქვთ მომხმარებლის სახელი, Password ველში
კი - პაროლი). შემდეგ, მაუსი დააწკაპუნეთ Connect ღილაკზე. ეკრანზე გამოვა Management Studio
ფანჯარა (სურ.3.1). ამ ფანჯარაში წარმოდგენილია: ფანჯრის მენიუ, ინსტრუმენტთა პანელი,

29
―Object Explorer‖ (ობიექტთა მიმომხილველი ანუ გადასვლების (ნავიგაციის) პანელი) და სამუშაო
არე;
2. Management Studio ფანჯრის გადასვლების პანელში Databases ფოლდერზე (სურ.3.1)
დააწკაპუნეთ მაუსის მარჯვენა ღილაკზე და წარმოდგენილ მენიუში აირჩიეთ New Database
პუნქტი. ეკრანზე გამოსული ფანჯრის (ეკრანის) ზედა ნაწილში განლაგებულია ორი პარამეტრი
(სურ.3.1): Database name (მბ სახელი) და Owner (მფლობელი). Database name ველში შეიტანეთ
ახალი მონაცემთა ბაზის სახელი (მაგალითად, Students). Owner პარამეტრი დატოვეთ
შეუცვლელად. აქვეა შესაძლებელი ახალი მონაცემთა ბაზის (New Database) ფაილის
პარამეტრების გაწყობა. კერძოდ, ფანჯრის მარცხენა მხარეს მოცემულია Selecs a page სია. ეს სია
გაწყობათა ჯგუფებს შორის გადართვის საშუალებას იძლევა. მთავარი გაწყობის არჩევისათვის
აუცილებელია General პუნქტზე დაწკაპუნება.

სურ.3.1. Management Studio საშუალებით მონაცემთა ბაზის შექმნის ფანჯარა

3. ახალი მონაცემთა ბაზის (New Database) ფანჯარაში მოცემულია მონაცემთა ფაილისა


და ტრანზაქციის ჟურნალის გაწყობის საშუალებები. იგი წარმოდგენილია ცხრილის სახით. ამ
ცხრილს აქვს შემდეგი სვეტები (სურ.3.1):
 Logical Name - მონაცემთა ფაილის და ტრანზაქციის ჟურნალის ლოგიკური სახელი. ამ
სახელით შესაძლებელი იქნება, მონაცემთა ბაზაში, ზემოთხსენებულ ფაილებზე მიმართვა.
შეიძლება აღვნიშნოთ, რომ მონაცემთა ფაილს აქვს იგივე სახელი რაც თვით მონაცემთა ბაზას,
ხოლო ტრანზაქციის ჟურნალის ფაილის სახელი შედგენილია მბ-ის სახელისა და log სუფიქსის
დამატებით;
 File Type - ფაილის ტიპი. ეს პარამეტრი გიჩვენებთ რომ ეს ფაილი მონაცემთა ფაილია თუ
ტრანზაქციის ჟურნალი;
 Filegroup - ფაილთა ჯგუფი. გიჩვენებთ თუ რომელ ფაილთა ჯგუფს მიეკუთვნება ეს
ფაილი. ადმინისტრირებისა და მონაცემთა ბაზის ობიექტების ფიზიკური განლაგების მართვის

30
გაადვილების მიზნით უმჯობესია ფაილები ჯგუფებში მოათავსოთ. არსებობს ფაილების
შემდეგი ტიპის ჯგუფები: ფაილების ძირითადი ჯგუფი (Primary File Group), მომხმარებლების
მიერ შექმნილი ფაილების ჯგუფი (User-defined File Group) და ფაილების ნაგულისხმევი ჯგუფი
(Default File Group). ნებისმიერი ფაილი შეიძლება ჩართული იყოს ფაილების მხოლოდ ერთ
ჯგუფში. არ შეიძლება ფაილების ჯგუფის განსაზღვრა ტრანზაქციების ჟურნალის
ფაილებისთვის. თუ მონაცემთა ბაზაში არ იქმნება ფაილების ჯგუფები, მაშინ ყველა ობიექტი
მოთავსდება ფაილების ძირითად ჯგუფში, რომელიც ავტომატურად იქმნება. ფაილთა ჯგუფის
გაწყობა შეიძლება Filegroup გაწყობათა ჯგუფში.
 Initial size (MB) - მონაცემთა ფაილის საწყისი ზომა და ტრანზაქციის ჟურნალი
მეგაბაიტებში;
 Autogrowth - ფაილის ზომის ავტომატური გაზრდა, როგორც კი ფაილში ჩაიწერება
ინფორმაცია, მისი ზომა ავტომატურად იზრდება იმ სიდიდით, რომელიც მითითებული იყო
Autogrowth პარამეტრში. გაზრდა შეიძლება მისცეთ, როგორც მეგაბაიტებში, ისე პროცენტებში.
ასევე შეიძლება მისცეთ ფაილს მაქსიმალური ზომა. ამ პარამეტრის ცვლილება შეიძლება, <<...>>
ღილაკზე დაწკაპუნებით. მოცემულ შემთხვევაში ფაილის ზომა (სურ.3.1) არაა შემოსაზღვრული.
მონაცემთა ფაილი იზრდება 1 მეგაბაიტით, ხოლო ტრანზაქციის ჟურნალის ფაილი 10 %-ით;
 Path - გზა ფოლდერისაკენ, სადაც ინახება ფაილები. ამ პარამეტრის ცვლილება შეიძლება
<<...>> ღილაკზე დაწკაპუნებით;
 File Name - ფაილის სახელი. გულისხმობით ფაილის სახელი ანალოგიურია მისი
ლოგიკური სახელისა, მაგრამ მონაცემთა ფაილს აქვს mdf გაფართოება.
მოცემულ შემთხვევაში ყველა პარამეტრი დატოვეთ უცვლელი.

შენიშვნა: ახალი მონაცემთა ფაილისა და ტრანზაქციის ჟურნალის დამატებისათვის


გამოიყენება Add ღილაკი, ხოლო წაშლისათვის - Remove ღილაკი.

4. მონაცემთა ფაილის მეორეხარისხოვანი გაწყობის საშუალებებზე წვდომა


შესაძლებელია select a page სიის options პუნქტით. ეკრანზე გამოვა შესაბამისი (სურ.3.2) ფანჯარა.
ფანჯრის მარჯვენა ნაწილში ჩანს შემდეგი პარამეტრები (თვისებები):

31
სურ.3.2. მონაცემთა ფაილის და ტრანზაქციის ჟურნალის პარამეტრების არჩევის ფანჯარა

 Collation - ეს პარამეტრი პასუხისმგებელია ტექსტური სტრიქონის დამუშავებაზე, მათ


შედარებაზე, ტექსტის ძებნაზე და ა.შ. რეკომენდირებულია დატოვოთ ის როგორც server default.
ამ შემთხვევაში მოცემული პარამეტრი ტოლია მნიშვნელობის, როგორც ეს მოცემულია სერვერის
დაყენების დროს Collation ჩანართში;
 Recovery Model - აღდგენის მოდელი. მოცემული პარამეტრი პასუხისმგებელია იმ
ინფორმაციაზე, რომელიც განკუთვნილია მბ აღდგენისათვის, რომელიც ინახება ტრანზაქციის
ფაილში. რაც უფრო სრულია აღდგენის მოდელი, მით უფრო მეტია ალბათობა მონაცემების
აღდგენისა, რომელიც გამოწვეული იყო, სისტემის ან მომხმარებლის შეცდომით. ამ შემთხვევაში
მით უფრო მეტია ტრანზაქციის ჟურნალის ზომა. თუ დისკზე ადგილი შეზღუდულია, მაშინ
რეკომენდირებულია ეს პარამეტრი დატოვოთ Full მნიშვნელობით;
 Compatibility level - ერთობლიობის (შედარების, შესაბამისობის) დონე, განსაზღვრავს
მონაცემთა ფაილის შესაბამისობას სერვერის უფრო ძველი ვერსიის ფაილისათვის. თუ იგეგმება
მონაცემების გადატანა სხვა უფრო ადრეული ვერსიის სერვერზე, მაშინ აუცილებელია ეს
მითითებული იყოს ამ პარამეტრებში;
 Othe options - მეორეხარისხოვანი პარამეტრი. მოცემული პარამეტრი წარმოადგენს
არააუცილებელ პარამეტრს ცვლილებებისათვის.
მოცემულ შემთხვევაში ყველა პარამეტრი options ჩანართში დატოვეთ ისე, როგორც ეს
სურ.3.3-ზეა მოცემული.
5. Filegroups გაწყობის ჯგუფი პასუხისმგებელია ფაილების ჯგუფებზე. მისი ეკრანზე
გამოტანისათვის აუცილებელია select a page სიაში მაუსი დააწკაპუნოთ Options პუნქტზე.
ფაილთა ჯგუფები წარმოდგენილია ფანჯრის მარჯვენა ნაწილის Rows ცხრილში. მოცემულ
ცხრილს აქვს შემდეგი სვეტები (სურ.3.3):

32
სურ.3.3. მონაცემთა ფაილის და ტრანზაქციის ჟურნალის პარამეტრების არჩევის ფანჯარა

 Name - ფაილთა ჯგუფის სახელი;


 Files - ჯგუფში შემავალი ფაილების რაოდენობა;
 Read only - ჯგუფში ფაილების მხოლოდ წაკითხვა შეიძლება. ე.ი. მათი მხოლოდ ნახვა
შეიძლება და არა მასში ცვლილების შეტანა;
6. მონაცემთა ბაზისათვის სახელის შეცვლა და მისი წაშლა ისეთივე წესებით ხდება,
როგორც ეს მიღებულია ოპერციულ სისტემა Windows–ში. კერძოდ, მონაცემთა ბაზის სახელის
შეცვლისათვის გამოიყენება Rename, წაშლისათვის – Delete, განახლებისათვის – Refresh, ხოლო
თვისებების შეცვლისათვის Properties ბრძანებები.

3.2. ცხრილის შექმნა და მასში ჩანაწერების შეტანა

მონაცემთა ბაზის მართვის სისტემა MS SQL Server საშუალებით შესაძლოა ცხრილის შექმნის
ორი ვარიანტი: გრაფიკული ინტერფეისის Managament studio–ს ან SQL ბრძანების გამოყენებით
(ეს უკანასკნელი განხილული იქნება მოგვიანებით).
თქვენს მიერ შექმნილი მონაცემთა ბაზის (მაგალითად, Students) ყველა ცხრილი ინახება ამ
მონაცემთა ბაზის Tables ქვეფოლდერში, რომლის ნახვაც შეგიძლიათ ობიექტთა მიმომხილველში
(სურ.3.4).

33
სურ.3.4. ობიექტთა მიმომხილველი (გადასვლების პანელი)

Microsoft SQL Server Management Studio უტილიტის ინსტრუმენტის გამოყენებით ცხრილის


შესაქმნელად საჭიროა:
1. შეასრულეთ Start-All Programs-Microsoft SQL Server 2008 - Microsoft SQL Server
Management Studio ბრძანება. გაიხსნება Microsoft SQL Server Management Studio ფანჯარა.
გახსენით თქვენს მიერ შექმნილი (სურ.3.4) მონაცემთა ბაზა (მაგალითად, Students);
2. ახალი ცხრილის შესაქმნელად Tables ფოლდერის კონტექსტურ მენიუში აირჩიეთ
New Table პუნქტი. ეკრანზე გამოვა ახალი ცხრილის შექმნის ფანჯარა (სურ.3.5).

სურ.3.5.ახალი ცხრილის შექმნის ფანჯარა

ფანჯრის მარჯვენა ნაწილში მოთავსებულია ცხრილი, სადაც ახალი ცხრილის ველები


განისაზღვრება. მოცემულ ცხრილს აქვს შემდეგი სვეტები (სურ.3.5):
 Column Name - ველის სახელი. ველის სახელი ყოველთვის უნდა იწყებოდეს ალფაბეტის
სიმბოლოთი და არ უნდა შეიცავდეს სხვადასხვა სპეციალურ სიმბოლოებს და ნიშნებს. თუ
ველის სახელი შეიცავს ჰარს, მაშინ ის ავტომატურად კვადრატულ ფრჩხილებში ჩაისმება;
 Data Type - მონაცემთა ველის ტიპი;
 Allow Nulls – Null მნიშვნელობის დაშვება. თუ ველის ეს თვისება ჩართულია, მაშინ ველს
არ შევსების შემთხვევაში მასში ავტომატურად შეიტანება Null მნიშვნელობა. მაშასადამე, ველის
შევსება აუცილებელი არაა.

34
შევიშვნა: ველის განსაზღვრის ცხრილის ქვემოთ მოთავსებულია მონიშნული ველის
თვისებების (Column Properties) ცხრილი. მოცემულ ცხრილში შესაძლებელია ველის თვისებების
შეცვლა.

3. ველთა განსაზღვრის ცხრილში შეიტანეთ Column Name, Data Type და Allow Nulls
სვეტების მნიშვნელობები ისე, როგორც ეს 3.6–ე სურათზეა მოცემული. Studentis_Id ველს
მიანიჭეთ გასაღები (მონიშნეთ ეს ველი და ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ
გასაღების ღილაკზე ან შეასრულეთ Table Designer მენიუს Set Primary Key ბრძანება).

სურ.3.6. ახალი ცხრილის ველების შექმნის ფანჯარის ფრაგმენტი

როგორც 3.6–ე სურათზე ჩანს თქვენს ცხრილს აქვს რამდენიმე ველი:


 Studentis_Id ველის ტიპი რიცხვითია (სტუდენტის პირადი ნომერი). ველს აქვს გასაღები. ამ
ველით შეიძლება ეს ცხრილი დაუკავშირდეს სხვა ცხრილს;
 Gvari, Saxeli, Safexuri, Erovneba, Specialoba, Telefoni და Sqesi ველები განკუთვნილია
ტექსტური ტიპის მონაცემების შეტანისათვის, რომლებსაც აქვთ ფიქსირებული სიგრძე;
 Misamarti ველი განკუთვნილია ტექსტური ტიპის მონაცემების შეტანისათვის, რომელსაც
აქვს შეუზღუდავი სიგრძე;
 Kursi ველი განკუთვნილია რიცხვით ტიპის მონაცემების შეტანისათვის;
 Dabadebis_Tarigi ველი განკუთვნილია თარიღის ტიპის მონაცემების შეტანისათვის;
ამით ახალი ცხრილის ველების ფორმირების პროცესი მთავრდება;

შენიშვნა: ცხრილში ველების სახელები შეგიძლიათ შეიტანოთ ქართული ალფაბეტითაც.


კერძოდ, Studentis_Id სახელის ნაცვლად შეგიძლიათ შეიტანოთ N'სტუდენტის პირადი ნომერი',

35
Gvari სახელის ნაცვლად შეგიძლიათ შეიტანოთ N'გვარი', Saxeli სახელის ნაცვლად შეგიძლიათ
შეიტანოთ N'სახელი' და ა.შ.

4. ცხრილის შენახვისათვის დახურეთ ახალი ცხრილის ფანჯარა. ეკრანზე გამოვა


მოთხოვნა ცხრილის შენახვის შესახებ (სურ.3.7). ამ ფანჯარაში აუცილებელია Yes ღილაკზე
დააწკაპუნეთ მაუსი. შემდეგ ეკრანზე გამოვა Chose Name სარკმელი (სურ.3.7), სადაც შეიტანეთ
ახალი ცხრილის სახელი (მაგალითად, Studentebi). შემდეგ მაუსი დააწკაპუნეთ OK ღილაკზე.

სურ.3.7. ახალი ცხრილის შენახვისსარკმელი

ახალი ცხრილი გამოჩნდება გადასვლების პანელში. კერძოდ, თქვენი მონაცემთა ბაზის


(მაგალითად, students) Tables ცხრილში;

შენიშვნა: გადასვლების პანელში თქვენს მიერ შექმნილი (მაგალითად, Studentebi) ცხრილი


გამოჩნდება, როგორც dbo.Studentebi. dbo პრეფიქსი ნიშნავს იმას, რომ ცხრილი წარმოადგენს
მონაცემთა ბაზის ობიექტს (Data Base Object). შემდგომში მონაცემთა ბაზის ობიექტებთან
მუშაობისას dbo პრეფიქსი შეგიძლიათ არ გამოიყენოთ.

5. ზუსტად ანალოგიური წესით შეგიძლით შექმნათ ახალი ცხრილი (მაგალითად,


Shefaseba). კერძოდ, ველთა განსაზღვრის ცხრილში შეიტანეთ Column Name, Data Type და Allow
Nulls სვეტების მნიშვნელობები ისე, როგორც ეს 3.8–ე სურათზეა მოცემული.

36
სურ.3.8. ახალი ცხრილის ველების შექმნის ფანჯარის ფრაგმენტი

Id, I, II, III, gamocda და krediti ველების ტიპი რიცხვითია. Id ველს მიანიჭეთ გასაღები. Id
ველი, რომ გახადოთ მთვლელად, ამისათვის მონიშნეთ ეს ველი. ცხრილის თვისებებში
გამოჩნდება Id ველის თვისებები. გაშალეთ Identily Specification ჯგუფის თვისებები. (Is Identity)
თვისებაში დააყენეთ Yes მნიშვნელობა. შეიტანეთ Identity და Identity seed თვისებებში ერთი
(სურ.3.9). ეს თვისება გიჩვენებთ, რომ Id ველის მნიშვნელობა დაიწყება 1, 2 და ა.შ.;

სურ.3.9. ახალი ცხრილის ველის თვისებების შეცვლის ფანჯარის ფრაგმენტი

 kodi (ან Studentis_Id) ველი განკუთვნილია რიცხვით ტიპის მონაცემების შეტანისათვის. ამ


ველით შეიძლება ეს ცხრილი დაუკავშირდეს სხვა ცხრილს;
 semestri და sagani ველები განკუთვნილია ტექსტური ტიპის მონაცემების შეტანისათვის,
რომლებსაც აქვთ ფიქსირებული სიგრძე;
 tarigi ველი განკუთვნილია თარიღის ტიპის მონაცემების შეტანისათვის;
ამით ახალი ცხრილის ველების ფორმირების პროცესი მთავრდება. შეინახეთ ცხრილი
ახალი სახელით (მაგალითად, Shefaseba). ახალი ცხრილი გამოჩნდება გადასვლების პანელში.
კერძოდ, თქვენი მონაცემთა ბაზის (მაგალითად, students) Tables ცხრილში;
6. თქვენს მიერ შექმნილ ცხრილებში მონაცემების შეტანისათვის ობიექტთა
მიმომხილველში მონიშნეთ ის ცხრილი, რომელშიც გსურთ მონაცემების შეტანა (მაგალითად,
Studentebi). მასზე გამოიძახეთ კონტექსტური მენიუ და შეასრულეთ Edit Top 200 Rows (პირველი
200 ჩანაწერის რედაქტირება) ბრძანება. Microsoft SQL Server Management Studio სამუშაო არეში
გამოჩნდება ცხრილის შევსების ფანჯარა. შეავსეთ ცხრილი სასურველი და შესაბამისი
მონაცემებით (სურ.3.10, 3.11) და შემდეგ დახურეთ ფანჯარა.

37
სურ.3.10. Studentebi ცხრილში შეტანილიმონაცემების ფრაგმენტი

შენიშვნა: ანალოგიური წესით შეივსება ნებისმიერი ცხრილი (მაგალითად, Shefaseba). თუ


ცხრილში რომელიმე ველს აქვს მთვლელის ტიპი ის ავტომატურად შეივსება (სურ.3.11).
ცხრილებში მონაცემების შეტანისას ყურადღება გასამახვილებელია პირველადი გასაღებისა და
მეორადი გასაღების ველთა მიშვნელობების შეტანას.

სურ.3.11. Shefaseba ცხრილში შეტანილი მონაცემების ფრაგმენტი

7. ცხრილის გახსნა კონსტრუქტორში (Design) შესაძლებელია თუ შესაბამის ცხრილზე


გამოიძახებთ კონტექსტურ მენიუს და შეასრულებთ Design ბრძანებას. ეკრანზე გამოვა ველთა
შეტანის ფანჯარა, სადაც შეგიძლიათ ცვლილებები შეიტანოთ. ხოლო Select Top 1000 Rows
ბრძანების შესრულებით, ეკრანზე გამოვა შესაბამისი მოთხოვნა და ცხრილის შიგთავსი
(სურ.3.12).

სურ.3.12. Studentebi ცხრილისშესაბამისი მოთხოვნა დაშეტანილი მონაცემების ფრაგმენტი

38
მონაცემების გაცვლა

სერვერს აქვს პროგრამები, რომლებიც იძლევიან მონაცემების გაცვლის საშუალებას SQL


სერვერსა და მონაცემების დამუშავების სხვა სისტემებს შორის, როგორიცაა Access, FoxPRo, Excel
და ა.შ.

4. მონაცემების იმპორტი და ექსპორტი

არსებობს მონაცემების გაცვლის ორი სახე - იმპორტი და ექსპორტი:


 მონაცემების იმპორტი - ესაა პროცესი, როცა ხდება მონაცემების ამოღება გარე
წყაროებიდან (მაგალითად, Access), დამუშავება და SQL სერვერის მონაცემთა ბაზების
ცხრილებში ჩაწერა;
 მონაცემების ექსპორტი - ესაა პროცესი, როცა ხდება მონაცემების ამოღება SQL სერვერის
მონაცემთა ბაზების ცხრილებიდან, დამუშავება და მიმღების (მაგალითად, Access) ცხრილებში
ჩაწერა.
მონაცემების იმპორტი საჭიროა მაშინ, როცა დააყენებთ SQL სერვერის ახალ ვერსიას და
საჭიროა წინა ვერსიიდან მონაცემების გადმოტანა ახალ ვერსიაში. მონაცემების იმპორტი
საჭიროა, აგრეთვე, იმ შემთხვევაშიც, როცა მონაცემების გადმოტანა გინდათ სხვა სისტემიდან,
მაგალითად, როგორიცაა Access.

4.1. მონაცემების იმპორტი SQL სერვერზე

მონაცემების იმპორტი Access სისტემიდან SQL სერვერის რომელიმე მონაცემთა ბაზაში,


მაგალითად, Studentebi მონაცემთა ბაზაში Access სისტემიდან მონაცემების იმპორტისათვის ჯერ
უნდა გააქტიუროთ ეს ბაზა. ამისათვის, საკმარისია მასზე (Studentebi) გახსნათ კონტექსტური
მენიუ და შეასრულოთ Tasks ქვემენიუს Import Data ბრძანება. გაიხსნება SQL Server Import and
Export Wizard ფანჯარა (სურ.4.1). მაუსი დააწკაპუნეთ Next ღილაკზე. გახსნილი ფანჯრის Data
source სიიდან ირჩევთ Microsoft Access ელემენტს (სურ.4.2). Browse კლავიშის საშუალებით
ირჩევთ საჭირო ფაილს, მაგალითად University.mdb და მაუსი დააწკაპუნეთ Next ღილაკზე.

39
სურ.4.1. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის დაწყების ფანჯარა

სურ.4.2. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

მომდევნო ფანჯრაში ჩანს სერვერისა და მონაცემთა ბაზის სახელი, რომელშიც უნდა


შესრულდეს მონაცემების იმპორტი (სურ.4.3).

სურ.4.3. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

სურვილის შემთხვევაში New კლავიშის საშუალებით შეგვიძლია შევქმნათ ახალი ბაზა.


ირჩევთ აუტენტიფიცირების რეჟიმს და მაუსი დააწკაპუნეთ Next ღილაკზე. გახსნილ ფანჯარაში

40
(სურ.4.4) ირჩევთ Copy data from one or more tables or views გადამრთველს და მაუსი დააწკაპუნეთ
Next ღილაკზე. გახსნილ ფანჯარაში გამოჩნდება University.mdb მონაცემთა ბაზის ობიექტები,
კერძოდ ცხრილები.

სურ.4.4. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

სურ.4.5. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

სურ.4.6. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

მონიშნოთ ეს (სასურველი) ცხრილები და მაუსი დააწკაპუნეთ Next ღილაკზე. მომდევნო


ფანჯარაში (სურ.4.5) მაუსი დააწკაპუნეთ Next ღილაკზე. გახსნილ ფანჯარაში (სურ.4.6) მაუსი
დააწკაპუნეთ Finish ღილაკზე. დაიწყება მონაცემების იმპორტი (სურ.4.7, 4.8).

41
სურ.4.7. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის მომდევნო საფეხურის ფანჯარა

სურ.4.8. Access სისტემიდან SQL სერვერზე მონაცემების იმპორტის დამთავრების ფანჯარა

ოპერაციის დამთავრების შემდეგ დახურეთ ფანჯარა. იმპორტირებული ცხრილების


სანახავად უნდა გახსნათ თქვენს მიერ შექმნილი (მაგალითად, Studentebi) მონაცემთა ბაზის
Tables ელემენტი.

4.3. მონაცემების ექსპორტი Access სისტემაში

SQL სერვერის რომელიმე მონაცემთა ბაზიდან (მაგალითად, Studentebi მონაცემთა


ბაზიდან), Access სისტემაში მონაცემების ექსპორტისათვის მასზე (Studentebi მონაცემთა ბაზაზე)
ხსნით კონტექსტურ მენიუს და ასრულებთ Tasks ქვემენიუს Export Data ბრძანებას. გაიხსნება SQL
Server Import and Export Wizard ფანჯარა. მაუსი დააწკაპუნეთ Next ღილაკზე. გახსნილ ფანჯარაში

42
(სურ.4.9) ირჩევთ მონაცემების წყაროს, საიდანაც უნდა შესრულედეს მონაცემების გადაწერა.
Database ველში ჩანს Studentebi მონაცემთა ბაზა, საიდანაც შესრულდება ცხრილების გადაწერა.
ირჩევთ აუტენტიფიცირების რეჟიმს და მაუსი დააწკაპუნეთ Next ღილაკზე. მომდევნო
ფანჯარაში (სურ.4.10) ირჩევთ მონაცემების მიმღებს. Destination სიიდან ირჩევთ Microsoft Access
ელემენტს. Browse ღილაკით ირჩევთ საჭირო ფაილს (ფაილებს). Next ღილაკზე მაუსის
დააწკაპუნების შემდეგ გაიხსნება სურ.4.11-ზე ნაჩვენები ფანჯარა. ამ ფანჯარაში გამოჩნდება
Studentebi მონაცემთა ბაზის ობიექტების სია. მონიშნეთ სასურველი ცხრილები. ისევ მაუსი
დააწკაპუნეთ Next ღილაკზე. Finish ღილაკზე მაუსის დაწკაპუნებით დაიწყება მონაცემების
ექსპორტი. ექსპორტის შემდეგ გახსნათ Studentebi.mdb ფაილი. Tables განყოფილებაში დაინახავთ
ორივე გადაწერილ ცხრილს.

სურ.4.9. SQL სერვერიდან Access სისტემაში მონაცემების ექსპორტის ფანჯარა

სურ.4.10. SQL სერვერიდან Access სისტემაში მონაცემების ექსპორტის ფანჯარა

43
სურ.4.11. SQL სერვერიდან Access სისტემაში მონაცემების ექსპორტის ფანჯარა

44
ლექცია №5

მონაცემთა ამორჩევა SQL ბრძანებების გამოყენებით

შესავალი. ნებისმიერი მონაცემთა ბაზის მართვის სისტემის მიზანია განახორციელოს


ოპერაციები მონაცემებზე: შეტანა, შეცვლა, წაშლა და ამორჩევა. ამასთანავე მონაცემთა ამორჩევა
(მოთხოვნა) წარმოადგენს ხშირად გამოყენებად ასპექტს მონაცემთა მართვის საქმეში. ამორჩევა
წარმოებს ერთადერთი SELECT ბრძანების დახმარებით, რომელიც წარმოადგენს DML (Data
Manipulation Language - მონაცემთა მართვის ენა) ენის ნაწილს.
SELECT ბრძანების შესრულების შედეგი არის მონაცემთა საბოლოო ნაკრები, რომელიც
შედგება ისეთი ნაწილებისაგან, როგორიცაა სვეტების სათაურები და მონაცემთა ჩანაწერები.
ასეთი ნაკრები უნდა შეიცავდეს არანაკლებ ერთ სვეტს, ჩანაწერები შეიძლება იყოს ან შეიძლება
არ იყოს.
SELECT ბრძანება შვიდი მთავარი ნაწილისაგან შედგება: ამორჩევის სია და FROM, WHERE,
GROUP BY, HAVING, ORDER BY და COMPUTEგანყოფილებები. აქედან სავალდებულოს
წარმოადგენს ამორჩევის სია, ხოლო დანარჩენი ნაწილების გამოყენება შეიძლება იმ
თანმიმდევრობით, როგორცეს ზემოთ არის მოცემული.
სასურველი მოთხოვნის შესრულებისათვის შეასრულეთ Start-All Programs-Microsoft SQL
Server 2008-Microsoft SQL Server Management Studio ბრძანება. გაიხსნება Microsoft SQL Server
Management Studio ფანჯარა. ობიექტთა მიმომხილველში აირჩიეთ თქვენი მონაცემთა ბაზა.
შემდეგ ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ New Query ღილაკზე (ან გახსენით File
მენიუ, შემდეგ აირჩიეთ New პუნქტი და გაუშვით Query with current connection (Ctrl+N)
ბრძანება). ეკრანზე გამოვა მოთხოვნის ფანჯარა (სურ.5.1, 5.2), რომელშიც შეგიძლიათ ჩაწეროთ
Transact-SQL ბრძანებებით მოთხოვნა;

45
სურ.5.1. მოთხოვნის ჩაწერის ფანჯარა

5.1. მონაცემთა მარტივი ამორჩევა

მონაცემთა მარტივი ამორჩევისათვის (მოთხოვნისათვის) გამოიყენება SELECT ოპერატორის


მარტივი სინტაქსი:

SELECT [ALL | DISTINCT] [TOP n [PERCENT]] ამორჩევის სია


FROM ცხრილის სახელი
WHERE ამორჩევის პირობა

ამორჩევის სია განსაზღვრავს იმ ველებს, რომლებიც მონაცემთა ნაკრების საბოლოო


შედეგში იქნება.ცხრილის სახელი მიუთითებს მონაცემთა ბაზის ცხრილს, რომლიდანაც
მოთხოვნის შედეგად მიიღება (ბრუნდება) ჩანაწერები. ხოლო ამორჩევის პირობა საშუალებას
იძლევა ლოგიკური ოპერატორების დახმარებით შეიზღუდოსმოთხოვნის შედეგად მიღებული
ჩანაწერების რაოდენობა.
გულისხმობის პრინციპით SELECT ბრძანება აბრუნებს (გამოაქვს) ყველა ჩანაწერს, მათ
შორის დუბლირებულსაც, რაც განისაზღვრება საკვანძო სიტყვა ALL-ით, რომელიც შეიძლება არ
ჩაწეროთ. თუ გსურთ უნიკალური განუმეორებელი ჩანაწერების გამოტანა, მაშინ გამოიყენება
საკვანძო სიტყვა DISTINCT.
TOP საკვანძო სიტყვის გამოყენებით შესაძლებელია გამოიტანოთ ამორჩეული არა ყველა
ჩანაწერი არამედ n რაოდენობის პირველი ჩანაწერი. შეიძლება აგრეთვე აირჩიოთ არამარტო
ჩანაწერთა ფიქსირებული რაოდენობა, არამედ განსაზღვროთ ყველა სტრიქონის პროცენტული
რაოდენობა და ეს გამოიტანოთ. ამის განსაზღვრა შესაძლებელია საკვანძო სიტყვა PERCENT.
ამორჩევის სია შეიძლებაშეიცავდეს შემდეგ ერთ ან რამდენიმე ელემენტს:

*|ველის სახელი| გამოსახულება [AS ფსევდონიმი, [...n].

ცხრილიდან ყველა ველის ამორჩევისათვის ამორჩევის სიაში აუცილებელია მიუთითოთ (*)

ვარსკვლავი.
AS საკვანძო სიტყვა საშუალებას იძლევა საშედეგო მონაცემთა ნაკრებში ველის
ჩვეულებრივი სახელი შეცვალოთ ფსევდონიმით. ფსევდონიმის სახელი უნდა აკმაყოფილებდეს
ობიექტზე სახელის დარქმევის წესებს. თუ აუცილებელია დაუშვებელი სიმბოლოების

46
გამოყენება (ჰარის ან ნაციონალური ალფაბეტი), მაშინ ფსევდონიმის სახელი ჩაისმება
კვადრატულ ფრჩხილებში.
ამრიგად, SELECT გამოსახულება-მოთხოვნაში აუცილებელ საკვანძო სიტყვას წარმოადგენს
სიტყვა FROM (დან). FROM საკვანძო სიტყვის შემდეგ მითითებულია იმ ცხრილთა სახელები,
რომლებიდან ხდება ინფორმაციის ამორჩევა. ცხრილთა ველთა სახელები ერთმანეთისაგან
გამოიყოფა მძიმით.
მაგალითები:

ა) დაწერეთ მოთხოვნა (სურ.5.2), რომლითაც მიიღება ცხრილი, რომელშიც იქნება სამი


სვეტი (სურ.5.3):

SELECT Gvari, Saxeli, Safexuri


FROM [students].[dbo].[studentebi]

სურ.5.2. მოთხოვნის ჩაწერის ფანჯარა

სურ.5.3. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომლითაც მიიღება თავდაპირველი ცხრილი:

SELECT *
FROM [students].[dbo].[studentebi]

47
სურ.5.4. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც არ იქნება


დუბლირებული სტრიქონები. მაგალითად, სტუდენტების გვარები:

SELECT DISTINCT Gvari


FROM [students].[dbo].[studentebi]

სურ.5.5. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც იქნება საგნების


მიხედვით სტუდენტების შეფასებები:

SELECT sagani, I, II, III, gamocda


FROM [students].[dbo].[shefaseba]

სურ.5.6. მოთხოვნის შედეგი

ე) დაწერეთ მოთხოვნა, რომლის შედეგად მიიღებთ ცხრილს, რომელშიც იქნება პირველი


ათი სტრიქონი:

48
SELECT TOP 10 Gvari, Saxeli, Safexuri
FROM [students].[dbo].[studentebi]

სურ.5.7. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომლის შედეგად მიიღებთ ცხრილს, რომელშიც იქნება ცხრილის


სტრიქონების 50 პროცენტი:

SELECT TOP 50 PERCENT Gvari, Saxeli, Safexuri


FROM [students].[dbo].[studentebi]

სურ.5.8. მოთხოვნის შედეგი

ზ) დაწერეთ მოთხოვნა, რომლის შედეგად მიიღებთ ცხრილს, რომელშიც იქნება 5 სვეტი.


მეოთხე სვეტის სახელი იქნება Qalaqi, ხოლო მნიშვნელობა - Batumi. ასევე მეექვსე - სვეტის
სახელი იქნება Premia, ხოლო მნიშვნელობა - 500:

SELECT Gvari, Saxeli, Safexuri, 'Batumi' AS Qalaqi, 500 AS Premia


FROM [students].[dbo].[studentebi]

სურ.5.9. მოთხოვნის შედეგი

49
თ) დაწერეთ მოთხოვნა, რომლის შედეგად მიიღებთ ცხრილს, რომელშიც იქნება
სტუდენტების პირადი ნომრები (kodi) და შეფასებების (ქულათა) ჯამი:

SELECT kodi, I+II+III+Gamocda AS [Qulata jami]


FROM [students].[dbo].[shefaseba]

სურ.5.10. მოთხოვნის შედეგი

SELECT ოპერატორში გამოყენებული საკვანძო სიტყვა WHERE (სად) საშუალებას იძლევა


გამოსახულებას მისცეთ პირობა, რომელმაც შეიძლება მიიღოს მნიშვნელობა „ჭეშმარიტია― ან
„მცდარია― ცხრილის იმ ველთა მნიშვნელობებისათვის, რომლებზეც SELECT ოპერატორი
აკეთებს მიმართვას. WHERE გამოსახულება განსაზღვრავს თუ მითითებულ ცხრილში რომელი
სტრიქონი უნდა იყოს არჩეული. მოთხოვნის შესრულების შედეგად მიღებულ ცხრილში იქნება
მხოლოდ ის სტრიქონები, რომლისთვისაც გამოსახულება WHERE ღებულობს ჭეშმარიტ
მნიშვნელობას.

ი) დაწერეთ მოთხოვნა, რომლის შედეგად მიიღებთ ცხრილს, რომელშიც იქნება „ბერიძე―


გვარის სტუდენტების მონაცემები:

SELECT Gvari, Saxeli, Safexuri


FROM [students].[dbo].[studentebi]
WHERE Gvari =N'ბერიძე'

სურ.5.11. მოთხოვნის შედეგი

50
შენიშვნა: N'ბერიძე' ჩანაწერში N სიმბოლო იწერება ნაციონალური ალფაბეტის
(მაგალითად, ქართულის) გამოყენების გამო.

WHERE პირობაში შეიძლება გამოყენებული იყოს შედარების ოპერაციები, რომელიც


განისაზღვრება = (ტოლია), > (მეტია), < (ნაკლებია), > = (მეტია ან ტოლია), < = (ნაკლებია ან
ტოლია) და <> (არ უდრის) ოპერატორებით. აგრეთვე AND, OR და NOT ლოგიკური
ოპერატორებით.

კ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს იმ სტუდენტების სახელსა და გვარს,


რომლებიც სწავლობენ მესამე კურსზე და ღებულობენ სტიპენდიას:

SELECT Gvari, Saxeli


FROM [students].[dbo].[studentebi]
WHERE Kursi = 3 AND Stipendia> 0

სურ.5.12. მოთხოვნის შედეგი

5.1.1. მათემატიკურ ფუნქციებთან მუშაობის მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც გამოიტანს (იპოვის) რიცხვის აბსოლუტურ


მნიშვნელობას:

SELECT ABS(-34) AS N'რიცხვის მოდული'

სურ.5.13. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს (იპოვის) სასურველი


ჩანაწერისათვის (მაგალითად, stipendia ველისათვის) აბსოლუტურ მნიშვნელობას:

SELECT ABS (stipendia) AS N'ჩანაწერის მოდული'

51
FROM students.dbo.studentebi

სურ.5.14. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილში სასურველი ჩანაწერისათვის


(მაგალითად, stipendia და gvari ველებისათვის) რიცხვით ტიპს შეამოწმებს:

SELECT IsNumeric(stipendia) AS N'აქვს თუ არ რიცხვითი ტიპი',


IsNumeric(gvari) AS N'აქვს თუ არ რიცხვითი ტიპი'
FROM students.dbo.studentebi

სურ.5.15. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომელიც აგენერირებს შემთხვევით რიცხვს 0-დან 1-მდე


შუალედში:

SELECT Rand () AS N'0-დან 1-მდე შემთხვევითი რიცხვი'

სურ.5.16. მოთხოვნის შედეგი

ე) დაწერეთ მოთხოვნა, რომელიც მოცემულ რიცხვს დამრგვალებს უახლოეს მინიმალურ


მთელ რიცხვამდე:

SELECT Floor(123.756) AS N'რიცხვის დამრგვალება უახლეს მთელ რიცხვამდე'

52
სურ.5.17. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომელიც მოცემული რიცხვის მითითებული მნიშვნელობიდან


აბრუნებს უახლოეს მთელ რიცხვს, რომელიც მეტია ან ტოლია თავდაპირველად მიცემულ
რიცხვზე:

SELECT Ceiling(135.256) AS N'რიცხვის დამრგვალება მასზე მეტ (ან ტოლ) მთელ


რიცხვამდე'

სურ.5.18. მოთხოვნის შედეგი

ზ) დაწერეთ მოთხოვნა, რომელიც მოცემულ რიცხვს აახარისხებს მოცემული რიცხვით:

SELECT Power (3, 2) AS N'რიცხვის ახარისხება'

სურ.5.19. მოთხოვნის შედეგი

თ) დაწერეთ მოთხოვნა, რომელიც მოცემული რიცხვიდან ფესვს ამოიღებს:

SELECT Sqrt (64) AS N'ფესვის ამოღება'

სურ.5.20. მოთხოვნის შედეგი

ი) დაწერეთ მოთხოვნა, რომელიც მოცემულ რიცხვს დამრგვალებს სხვადასხვა სიზუსტით:

SELECT FLOOR(5.9) AS [დამრგვალება ქვევით], CEILING(7.3) AS [დამრგვალება ზევით],


ROUND(425.68053, 2) AS [დამრგვალება წერტილის შემდეგ],

53
ROUND(2975.733, -2) AS [დამრგვალება წერტილამდე]

სურ.5.21. მოთხოვნის შედეგი

კ) დაწერეთ მოთხოვნა, რომელიც მოცემულ რიცხვს აახარისხებს მოცემული რიცხვით და


მოცემული რიცხვიდან ფესვს ამოიღებს:

SELECT POWER(4,5) AS [რიცხვის ხარისხი], SQRT(625) AS [კვადრატული ფესვი


რიცხვიდან]

სურ.5.22. მოთხოვნის შედეგი

ლ) დაწერეთ მოთხოვნა, რომელიც მოცემული რიცხვებისათვის ტრიგონომეტრიულ


ფუნქციებს (მაგალითად, სინუსისა და კოსინუსის) გამოითვლის და მოცემული რიცხვისათვის
იპოვის მოცემული რიცხვის აბსოლუტურ მნიშვნელობას:

SELECT SIN(0) AS [სინუსი], COS(0) AS [კოსინუსი],


ABS(-13) AS [აბსოლუტური მნიშვნელობა]

სურ.5.23. მოთხოვნის შედეგი

მ) დაწერეთ მოთხოვნა, რომელიც აგენერირებს შემთხვევით რიცხვებს:

SELECT RAND(7) AS [შემთხვევითი რიცხვი],


RAND(2) * 10 AS [შემთხვევითი რიცხვი],
RAND() AS [შემთხვევითი რიცხვი]

54
სურ.5.24. მოთხოვნის შედეგი

5.1.2. სიმბოლურ ფუნქციებთან მუშაობის მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც გამოიტანს მოცემული ფრაზის პირველი სიმბოლოს ASCII


კოდის:

SELECT Ascii('batumi') AS N'პირველი სიმბოლოს ASCII კოდი'

სურ.5.25. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს მოცემული ASCII კოდის შესაბამის სიმბოლოს:

SELECT Char(71) AS N'71-ის ASCII კოდის შესაბამისი სიმბოლო'

სურ.5.26. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც დაითვლის მოცემულ ფრაზაში (სტრიქონში) სიმბოლოთა


რაოდენობას:

SELECT Len('batumi') AS N'ფრაზაში სიმბოლოთა რაოდენობა'

სურ.5.27. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზაში (სტრიქონში) წაშლის საწყის ჰარს:

SELECT LTrim(N'ბათუმი კარგი ქალაქია') AS N'ტექსტში საწყისი ჰარის წაშლა'

55
სურ.5.28. მოთხოვნის შედეგი

ე) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზაში (სტრიქონში) წაშლის ბოლო ჰარს:

SELECT RTrim(N'ბათუმი კარგი ქალაქია') AS N'ტექსტში ბოლო ჰარის წაშლა'

სურ.5.29. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომელიც მოცემული ფრაზიდან (სტრიქონიდან) გამოიტანს


სასურველ სიმბოლოთა (მაგალითად, სამი) რაოდენობას:

SELECT Left('batumi', 3) AS N'ფრაზიდან პირველი სამი სიმბოლოს გამოტანა'

სურ.5.30. მოთხოვნის შედეგი

ზ) დაწერეთ მოთხოვნა, რომელიც მოცემული ფრაზიდან (სტრიქონიდან) გამოიტანს ბოლო


სასურველ სიმბოლოთა (მაგალითად, ორი) რაოდენობას:

SELECT Right('batumi',2) AS N'ფრაზიდან ბოლო ორი სიმბოლოს გამოტანა'

სურ.5.31. მოთხოვნის შედეგი

თ) დაწერეთ მოთხოვნა, რომელიც მოცემული ფრაზიდან (სტრიქონიდან) სასურველ


ფრაზას ამოიღებს:

SELECT SubString(N'ბათუმი კარგი ქალაქია', 8, 4) AS N'სასურველი ფრაზა'

56
სურ.5.32. მოთხოვნის შედეგი

ი) მოცემულია ორი ფრაზა (სტრიქონი): batumi და kargi qalaqia batumi (მეორე სტრიქონში
მეორდება პირველი სტრიქონი). დაწერეთ მოთხოვნა, რომელიც გამოიტანს მეორე სტიქონში
პირველი სტრიქონის პირველი სიმბოლოს რიგითობის ნომრს:

SELECT CharIndex('batumi', 'kargi qalaqia batumi') AS N'რიგითობის ნომრი'

სურ.5.33. მოთხოვნის შედეგი

კ) მოცემულია ორი ფრაზა (სტრიქონი): batumi და batumi kargi qalaqia batumi. მეორე
სტრიქონში მეორდება პირველი სტრიქონი. დაწერეთ მოთხოვნა, რომელიც ძებნის დაწყების
რიგითობის ნომრის მითითებით გამოიტანს მეორე სტიქონში პირველი სტრიქონის პირველი
სიმბოლოს რიგითობის ნომრს:

SELECT CharIndex('batumi', 'batumi kargi qalaqia batumi', 2) AS N'რიგითობის ნომერი'

სურ.5.34. მოთხოვნის შედეგი

ლ) მოცემულია ორი ფრაზა (სტრიქონი): batumi და tbilisi. დაწერეთ მოთხოვნა, რომელიც


პირველ ფრაზაში სასურველი სიმბოლოდან (მაგალითად, მეორე სიმბოლოდან) დაწყებული
სასურველ სიმბოლოთა რაოდენობას (მაგალითად, სამ სიმბოლოს) ჩაანაცვლებს მეორე
ფრაზით:

SELECT Stuff('batumi', 2, 3, 'tbilisi') AS N'ფრაზის ნაწილის შეცვლა'

57
სურ.5.35. მოთხოვნის შედეგი

მ) მოცემულია სამი ფრაზა (სტრიქონი): batumi kargi qalaqia, batumi და gori. დაწერეთ
მოთხოვნა, რომელიც პირველ სტრიქონში არსებულ ფრაზას იმ შემთხვევაში შეცვლის მესამე
სტრიქონში არსებული ფრაზით, თუ მეორე სტრიქონის ფრაზის ნაწილი ემთხვევა პირველი
სტრიქონის ფრაზას:

SELECT Replace('batumi kargi qalaqia', 'batumi', 'gori') AS N'ფრაზის შეცვლა'

სურ.5.36. მოთხოვნის შედეგი

ნ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს ფრაზის (სტრიქონის) შემცველ სიმბოლოებს


უკუთანრიგით:

SELECT Reverse('batumi kargi qalaqia') AS N'სტრიქონის უკუთანრიგით გამოტანა'

სურ.5.37. მოთხოვნის შედეგი

პ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს მოცემული კოდის (რიცხვების) შესაბამის


სიმბოლოს:

SELECT NCHAR(27), NCHAR(45), NCHAR(76)

სურ.5.38. მოთხოვნის შედეგი

რ) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზებს (სტრიქონებს) გაერთიანებს ერთ

სვეტში (მაგალითად, „ანა― და „კახიძე― ფრაზები):

SELECT N'ანა' + SPACE(3) + N'კახიძე'

58
სურ.5.39. მოთხოვნის შედეგი

ს) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილის სხვადასხვა სვეტის მნიშვნელობებს


(მაგალითად, saxeli და gvari ველების მნიშვნელობები) გაერთიანებს ერთ სვეტში:

SELECT saxeli + SPACE(3) + gvari AS [სახელი და გვარი]

FROM [students].[dbo].[studentebi]

სურ.5.40. მოთხოვნის შედეგი

ტ) დაწერეთ მოთხოვნა, რომელიც მოცემული რიცხვითი ტიპის მონაცემს გარდაქმნის


სტრიქონული ტიპის მონაცემად და გამოიტანს მას გარკვეული წესით:

SELECT STR(32634.78795, 9, 3)

სურ.5.41. მოთხოვნის შედეგი

ი) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზას (ფრაზებს) ჩასვამს სპეციალურ


სიმბოლოებში (მაგალითად, [ ], '' '', { }, ( ), ' '):

SELECT QUOTENAME(N'ლელა')AS [სახელი], QUOTENAME(N'მეგი', '"') AS [სახელი],


QUOTENAME(N' მეგი', '{')AS [სახელი],QUOTENAME(N'მეგი', '(') AS [სახელი],
QUOTENAME(N'მეგი', '''') AS [სახელი]

სურ.5.42. მოთხოვნის შედეგი

59
კ) დაწერეთ მოთხოვნა, რომელიც შეცვლის სასურველ ფრაზას:

SELECT STUFF(N'გოგა თხილაიშვილი', 1, 4, N'დათო') AS [სახელი და გვარი]

სურ.5.43. მოთხოვნის შედეგი

ლ) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზას შეცვლის სასურველი ფრაზით:

SELECT REPLACE(N'თურმანიძე, დევაძე, გორაძე',N'ძე', N'შვილი') AS [ფრაზის შეცვლა]

სურ.5.44. მოთხოვნის შედეგი

მ) დაწერეთ მოთხოვნა, რომელიც მოცემულ ფრაზას (წინადადებას) მოცემულ


რაოდენობამდე გაიმეორებს:

SELECT REPLICATE(N'ლევან გორაძე, ', 3) AS [სახელი და გვარი]

სურ.5.45. მოთხოვნის შედეგი

ნ) დაწერეთ მოთხოვნა, რომელიც მოცემული ფრაზის პოზიციას (რიგითობას) მოიძევს


წინადადებაში:

SELECT CHARINDEX(N'რა', N'გოგა გორაძე')AS[ფრაზის დასაწყისი],


CHARINDEX(N'გო', N'გოგა გორაძე', 2) AS[ფრაზის დასაწყისი]

სურ.5.46. მოთხოვნის შედეგი

60
ო) დაწერეთ მოთხოვნა, რომელიც მოცემული ფრაზის (სტრიქონის) სიგრძეს (სიმბოლოთა
რაოდენობას) დაადგენს და გამოიტანს მოცემული მნიშვნელობის უნიკოდ-სიმბოლოს:

SELECT LEN(N'თამილა სამნიძე') AS [სტრიქონის სიგრძე],


NCHAR(4311) AS [უნიკოდ-სიმბოლო]

სურ.5.47. მოთხოვნის შედეგი

პ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს მოცემული სტრიქონიდან პირველი (ან


ბოლო) ფრაზის სასურველ ნაწილს:

SELECT LEFT(N'ნათია თხილაიშვილი', 3) AS [პირველი 3 სიმბოლო],


RIGHT(N'ნათია თხილაიშვილი', 10) AS [უკანასკნელი 10 სიმბოლო]

სურ.5.48. მოთხოვნის შედეგი

ჟ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილის მოცემული ველის მნიშვნელობები-


დან დატოვებს სასურველი რაოდენობის სიმბოლოს და ერთ სვეტში გააერთიანებს მას სხვა
ველის მნიშვნელობასთან ერთად:

SELECT LEFT(saxeli, 1) + SPACE(3) + gvari AS [სახელი და გვარი]


FROM [students].[dbo].[studentebi]

სურ.5.49. მოთხოვნის შედეგი

რ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილის მოცემული ველის მნიშვნელობები-


დან დატოვებს სასურველი რაოდენობის სიმბოლოს და ერთ სვეტში გააერთიანებს მას სხვა

61
ველის მნიშვნელობასთან ერთად. ხოლო ამ ველების მნიშვნელობებს შორის შეიტანეთ
სპეციალური სიმბოლო (მაგალითად, „წერტილი―):

SELECT LEFT(saxeli,1) + '. ' + gvari AS [სახელი და გვარი]


FROM [students].[dbo].[studentebi]

სურ.5.50. მოთხოვნის შედეგი

5.1.3. ცვლადების გამოცხადების, მათზე მნიშვნელობის მინიჭების და გამოყენების

მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც ცვლადს გამოაცხადებს და მას მნიშვნელობას მიანიჭებს.


ხოლო ცვლადის ამ მნიშვნელობისათვის იპოვის (გამოიტანს) აბსოლუტურ მნიშვნელობას:

DECLARE @ricxvi INT


SET @ricxvi=-67
SELECT ABS(@ricxvi) AS N'ცვლადის მნიშვნელობის მოდული'
ან
DECLARE @ricxvi INT =-67
SELECT ABS(@ricxvi) AS N'ცვლადის მნიშვნელობის მოდული'

სურ.5.51. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც რამდენიმე ცვლადს გამოაცხადებს და მათ მნიშვნელობებს


მიანიჭებს. ხოლო ცვლადების ამ მნიშვნელობებისათვის იპოვის (გამოიტანს) აბსოლუტურ
მნიშვნელობებს:

DECLARE @ricxvi1 INT, @ricxvi2 INT


SET @ricxvi1=-69
SET @ricxvi2=-23
62
SELECT ABS(@ricxvi1) AS N'ცვლადის მნიშვნელობის მოდული',
ABS(@ricxvi2) AS N'ცვლადის მნიშვნელობის მოდული'
ან
DECLARE @ricxvi1 INT =-69, @ricxvi2 INT =-23

SELECT ABS(@ricxvi1) AS N'ცვლადის მნიშვნელობის მოდული',


ABS(@ricxvi2) AS N'ცვლადის მნიშვნელობის მოდული'

სურ.5.52. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც ცვლადს გამოაცხადებს და მას მნიშვნელობას მიანიჭებს


(მაგალითად, თარიღი - 04/23/2013). ხოლო ცვლადის ამ მნიშვნელობიდან (თარიღიდან)
გამოყოფს რიცხვს:

DECLARE @tarigi DATE


SET @tarigi='04/23/2013'
SELECT DAY(@tarigi) AS N'თარიღიდან რიცხვის გამოყოფა'
ან
DECLARE @tarigi DATE ='04/23/2013'
SELECT DAY(@tarigi) AS N'თარიღიდან რიცხვის გამოყოფა'

სურ.5.53. მოთხოვნის შედეგი

5.1.4. თარიღისა და დროის ფუნქციებთან მუშაობის მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც გამოიტანს მიმდინარე თარიღსა და დროს:

SELECT GetDate() AS N'მიმდინარე თარიღი და დრო'

63
სურ.5.54. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც შეამოწმებს თარიღის (დროის) შეტანის ფორმატს:

IF ISDATE('2013-03-04 10:23:45.133')=1
PRINT N'სწორია'
ELSE
PRINT N'არ არის სწორი'

სურ.5.55. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც მოცემული თარიღიდან რიცხვს გამოყოფს:

SELECT Day('03/18/2013') AS N'თარიღიდან რიცხვი'

სურ.5.56. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომელიც მოცემული თარიღიდან თვეს გამოყოფს:

SELECT Month('03/18/2013') AS N'თარიღი და თვე'

სურ.5.57. მოთხოვნის შედეგი

ე) დაწერეთ მოთხოვნა, რომელიც მოცემული თარიღიდან წელს გამოყოფს:

SELECT Year('03/18/2013') AS N'თარიღი და წელი'

64
სურ.5.58. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომელიც მოცემული გამოსახულებიდან წელს განსაზღვრავს:

SELECT DateName(Year, '2013-03-18 12:10:30.126') AS N'წლის განსაზღვრა'

სურ.5.59. მოთხოვნის შედეგი

ზ) დაწერეთ მოთხოვნა, რომელიც მოცემული გამოსახულებიდან დღეს განსაზღვრავს:

SELECT DateName(weekday, '2013-03-18 12:10:30.126') AS N'დღის განსაზღვრა'

სურ.5.60. მოთხოვნის შედეგი

თ) დაწერეთ მოთხოვნა, რომელიც მოცემული გამოსახულებიდან კვირის დღეს


განსაზღვრავს:

SELECT DatePart(d,'2013-10-30 12:15:32.1234567') AS 'დღის განსაზღვრა'

სურ.5.61. მოთხოვნის შედეგი

ი) დაწერეთ მოთხოვნა, რომელიც მოცემული გამოსახულების საფუძველზე დაადგენს თუ


რამდენი მილიწამი გავიდა:

SELECT DatePart(millisecond,'00:00:01.1223450') AS N'მილიწამი'

65
სურ.5.62. მოთხოვნის შედეგი

კ) დაწერეთ მოთხოვნა, რომელიც მოცემული თარიღის რიცხვს დაამატებს მოცემულ


რიცხვს:

SELECT DateAdd(day, 5,'12.23.2013') AS N'სასურველი რიცხვის დამატება'

სურ.5.63. მოთხოვნის შედეგი

ლ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს საწყის და საბოლოო თარიღებს შორის


სხვაობას:

SELECT DateDiff(day,'12.12.2013','12.23.2013') AS N'საწყის და საბოლოო თარიღებს


შორის სხვაობა'

სურ.5.64. მოთხოვნის შედეგი

მ) დაწერეთ მოთხოვნა, რომელიც დააფიქსირებს თარიღსა და დროს:

SET DATEFORMAT DMY


SELECT DATEADD(dd, 5, '21.05.2012')AS[თარიღი და დრო],
DATEADD(yy, -2, '15 Oct 2012') AS[თარიღი და დრო]
SELECT DATEADD(hh, 10, '19.03.2011 4:30:45') AS[თარიღი და დრო]

66
სურ.5.65. მოთხოვნის შედეგი

პ) დაწერეთ მოთხოვნა, რომელიც მოცემული ორი თარიღისათვის გამოიტანს დღეთა,


წელთა და დროთა სხვაობას:

SET DATEFORMAT DMY


SELECT DATEDIFF(dd, '12.07.2012', '25.07.2012')AS [დღეთა სხვაობა],
DATEDIFF(yy, '05 Aug 2008', '05 Aug 2012')AS [წელთა სხვაობა],
DATEDIFF(hh, '13.09.2012 11:15:15', '13.09.2012 12:15:15')AS [დროთა სხვაობა]

სურ.5.66. მოთხოვნის შედეგი

რ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს (დაადგენს) მოცემული თარიღებიდან თვეთა


რიგითობას:

SET DATEFORMAT DMY


SELECT MONTH('25/07/2012') AS [თვე], MONTH('05 Aug 2011') AS [თვე]

სურ.5.67. მოთხოვნის შედეგი

ს) დაწერეთ მოთხოვნა, რომელიც გამოიტანს (დაადგენს) თარიღიდან დღეთა რიგითობას:

SET DATEFIRST 4
SELECT @@DATEFIRST AS 'პირველი დღე',
DATEPART(dw, GETDATE()) AS 'დღევანდელი დღე'

სურ.5.68. მოთხოვნის შედეგი

67
5.1.5. კონფიგურირების ფუნქციებთან მუშაობის მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც გამოიტანს სერვერის ვერსიის დასახელებას:

SELECT @@Version AS N'სერვერის ვერსიის დასახელება'

სურ.5.69. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს სერვერის სახელს:

SELECT @@ServerName AS N'სერვერის სახელი'

სურ.5.70. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს სერვერზე მომხმარებელთა ჩართვის


(დაკავშირების) რაოდენობას:

SELECT @@Max_Connections AS N'სერვერზე ჩართვის რაოდენობა'

სურ.5.71. მოთხოვნის შედეგი

5.1.6. სისტემურ ფუნქციებთან მუშაობის მაგალითები

ა) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილის სასურველი ველის


მნიშვნელობებისათვის გამოიტანს ბაიტთა რაოდენობას, რომელიც საჭიროა გამოსახულების
(ველის მნიშვნელობების) შენახვისათვის:

SELECT DataLength(saxeli) AS N'ბაიტთა რაოდენობა'

68
FROM students.dbo.studentebi

სურ.5.72. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც შეერთებისას (სერვერთან დაკავშირება) გამოიტანს ბოლო


შეცდომის კოდს:

SELECT @@Error AS N'ბოლო შეცდომის კოდი'

სურ.5.73. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც გამოიტანს კომპიუტერის სახელს, რომელზეც სრულდება


ბრძანება:

SELECT Host_Name()AS N'კომპიუტერის სახელი'

სურ.5.74. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომელიც სააღრიცხვო ჩანაწერის (სეერვერზე) სახელს გამოიტანს:

SELECT System_User AS N'სააღრიცხვო ჩანაწერის სახელი'

სურ.5.75. მოთხოვნის შედეგი

ე) დაწერეთ მოთხოვნა, რომელიც მიმდინარე მონაცემთა ბაზის მომხმარებლის სახელს


გამოიტანს:
69
SELECT Session_User AS N'მიმდინარე მონაცემთა ბაზა'

სურ.5.76. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომელიც გამოითვლის მილიწამების რაოდენობას, რომელიც


გავიდა MS SQL Server ბოლო გაშვების დროდან:

SELECT @@IDLE AS N'მილიწამების რაოდენობა'

სურ.5.77. მოთხოვნის შედეგი

ზ) დაწერეთ მოთხოვნა, რომელიც აგენერირებს UniqueIdentifier ტიპის ახალ მნიშვნელობას:

SELECT NewID() AS N'UniqueIdentifier ტიპის ახალ მნიშვნელობა'

სურ.5.78. მოთხოვნის შედეგი

თ) დაწერეთ მოთხოვნა, რომელიც ცხრილიდან მონაცემების ამორჩევის უფლებას


შეამოწმებს:

SELECT Permissions() AS N'ცხრილიდან მონაცემების ამორჩევა'

სურ.5.79. მოთხოვნის შედეგი

5.1.7. Transact-SQL-ის მართვადი კონსტრუქციების მაგალითები

70
ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილში „საკმარისს― მიანიჭებს ცხრილის იმ
ჩანაწერებს, რომლებსაც გამოცდაში მიღებული აქვთ 20-დან 25 ქულა, „კარგს― მიანიჭებს
ცხრილის იმ ჩანაწერებს, რომლებსაც გამოცდაში მიღებული აქვთ 30-დან 40 ქულა. ხოლო
„დამაკმაყოფილებელს― მიანიჭებს ცხრილის დანარჩენ ჩანაწერებს:

SELECT *, CASE

WHEN gamocda>20 AND gamocda<25 THEN N'საკმარისი'


WHEN gamocda>30 AND gamocda<40 THEN N'კარგი'
ELSE
N'დამაკმაყოფილებელი'
END comment
FROM students.dbo.shefaseba

სურ.5.80. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილში „საკმარისს― მიანიჭებს ცხრილის იმ


ჩანაწერებს, რომლებსაც გამოცდაში მიღებული აქვთ 33 ქულა, „კარგს― მიანიჭებს ცხრილის იმ
ჩანაწერებს, რომლებსაც გამოცდაში მიღებული აქვთ 40 ქულა. ხოლო „დამაკმაყოფილებელს―
მიანიჭებს ცხრილის დანარჩენ ჩანაწერებს:

SELECT *, CASE gamocda


WHEN 33 THEN N'საკმარისი'
WHEN 40 THEN N'კარგი'
ELSE
N'დამაკმაყოფილებელი'
END comment
FROM students.dbo.shefaseba

71
სურ.5.81. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც ცხრილში ჩანაწერის არსებობას შეამოწმებს:

SELECT CASE
WHEN EXISTS (SELECT * FROM students.dbo.studentebi) THEN N'არის ჩანაწერი'
ELSE
N'არ არის ჩანაწერი'
END N'კომენტარი'

სურ.5.82. მოთხოვნის შედეგი

5.2. IN, BETWEEN და LIKE ოპერატორები

WHERE ფრაზაში ლოგოკური პირობის მიცემისას შეიძლება გამოყენებული იყოს IN,


BETWEEN, LIKE და is NULL ოპერატორები.
IN (ტოლია ნებისმიერის სიიდან) და NOT IN (არ არის ტოლი არცერთის სიიდან)
ოპერატორები გამოიყენება შესამოწმებელი ველის მნიშვნელობის სიით მოცემულთან
შედარებისათვის. მნიშვნელობების ეს სია მითითებულია ფრჩხილებში IN ოპერატორის
მარჯვნივ.
IN პირობა არის ჭეშმარიტი, თუ ველის მნიშვნელობა, რომლის სახელიც მითითებულია IN-
ის მარცხნივ, ემთხვევა (იგულისხმება ზუსტი დამთხვევა) ერთ-ერთ იმ მნიშვნელობას,
რომლებიც ჩამოთვლილია სიაში და მითითებულია IN-ის მარჯვნივ ფრჩხილებში.

72
NOT IN პირობა არის ჭეშმარიტი, თუ ველის მნიშვნელობა, რომლის სახელიც
მითითებულია NOT IN-ის მარცხნივ, თუ ველის მნიშვნელობა არ ემთხვევა არც ერთ იმ
მნიშვნელობას, რომლებიც ჩამოთვლილია სიაში და მითითებულია ფრჩხილებში NOT IN-ის
მარჯვნივ.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა საბოლოო შეფასება (კომპონენტების ჯამი) ტოლია: 51, 61, 71, 81 და 91
ქულის:

SELECT *
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+Gamocda IN (51,61,71,81,91)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.83):

სურ.5.83. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა საბოლოო შეფასება (კომპონენტების ჯამი) არ არის ტოლია: 51, 61, 71, 81
და 91 ქულის:

SELECT *
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+Gamocda NOT IN (51,61,71,81,91)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.84):

73
სურ.5.84. მოთხოვნის შედეგი

BETWEEN ოპერატორი გამოიყენება მოცემულ ინტერვალში ველის მნიშვნელობის


მოთავსების პირობის შემოწმებისათვის ანუ ატრიბუტების მნიშვნელობის ნაცვლად ეს
ოპერატორი იძლევა მისი ცვლილების საზღვრებს.

გ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა საბოლოო შეფასება (კომპონენტების ჯამი) მოთავსებულია 51-დან 100-ს
ქულას შორის:

SELECT *
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+Gamocda BETWEEN 51 AND 100

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.85):

სურ.5.85. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა საბოლოო შეფასება (კომპონენტების ჯამი) არ არის მოთავსებულია 51-დან
100-ს ქულას შორის:

SELECT *
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+Gamocda NOT BETWEEN 51 AND 100

74
მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.86):

სურ.5.86. მოთხოვნის შედეგი

BETWEEN ოპერატორი შეიძლება გამოყენებული იყოს როგორც რიცხვითი ისე სიმბოლური


ტიპის ველებისათვის.
LIKE ოპერატორი გამოიყენება მხოლოდ სიმბოლური ტიპის ველებისათვის. ეს ოპერატორი
ამოწმებს შედის თუ არა შესამოწმებელი ველის სტრიქონულ მნიშვნელობაში LIKE ოპერატორით
განსაზღვრული სტრიქონული მნიშვნელობა. LIKE ოპერატორით განსაზღვრულ სტრიქონულ
მნიშვნელობაში გამოიყენება „ - ― და „%― სიმბოლოები. კერძოდ, „ - ― გამოიყენება ერთი
ნებისმიერი სიმბოლოს აღსანიშნავად, ხოლო „%― - ნებისმიერი სიგრძის თანმიმდევრული
სიმბოლოების აღსანიშნავად. შაბლონში შეიძლება გამოყენებული იყოს შემდეგი უნივერსალური
სიმბოლოები:
 % - გულისხმობს ნებისმიერ სტრიქონს, რომელიც შედგება 0 და მეტი სიმბოლოსაგან;
 _ - ტოლია ერთი სიმბოლოს;
 [] - ნებისმიერი სიმბოლოს მოცემული სიმრავლიდან (მაგალითად, [adfn], ან
დიაპაზონიდან (მაგალითად, [0–9]);
 [^] - ნებისმიერი სიმბოლო, რომელიც არ ხვდება მოცემულ დიაპაზონში ან სიმრავლეში;

ე) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა გვარიც იწყება „ბ― სიმბოლოზე:

SELECT Gvari, Saxeli


FROM [students].[dbo].[studentebi]
WHERE Gvari LIKE N'ბ%'

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.87):

75
სურ.5.87. მოთხოვნის შედეგი

ვ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


ჩანაწერებს, რომელთა გვარიც არ იწყება „ბ― სიმბოლოზე:

SELECT Gvari, Saxeli


FROM [students].[dbo].[studentebi]
WHERE Gvari NOT LIKE N'ბ%'

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.88):

სურ.5.88. მოთხოვნის შედეგი

შენიშვნა: შედარების ოპერატორები „=, <, >, <=, >=, <>― და IN, BETWEEN, LIKE ოპერატორები
არანაირად არ შეიძლება გამოყენებული იყოს ველის ცარიელი მნიშვნელობის შესამოწმებლად. ამ
მიზნით გამოიყენება სპეციალური ოპერატორები is NULL (არის ცარიელი) და is NOT NULL (არ
არის ცარიელი).

2.6. 5.3. მონაცემთა ანალიტიკური ამორჩევა

მონაცემთა ბაზიდან მონაცემების ანალიტიკური ამორჩევა ეყრდნობა Transact – SQL- ის


შესაძლებლობის მოთხოვნის შექმნაზე, რომელიც უწყვეტად დაკავშირებულია აგრეგირებულ
ფუნქციებთან:
 Avg ([all |distinct]გამოსახულება) - ყველა მნიშვნელობის საშუალო არითმეტიკული;

76
 Count ([all | distinct] გამოსახულება|*) - სიაში მნიშვნელობების რაოდენობა, რომელიც არ
შეიცავს NULL-ს. * სიმბოლოს გამოყენებისას დაითვლება ჩანაწერთა რაოდენობა, რომელშიც
შედის NULL მნიშვნელობაც ან განმეორებული მნიშვნელობები;
 Sum ([all |distinct] გამოსახულება) - სიის ყველა მნიშვნელობის ჯამი;
 Max ([all |distinct) - მაქსიმალური მნიშვნელობა;
 Min ([all |distinct] გამოსახულება) - მინიმალური მნიშვნელობა.
ALL საკვანძო სიტყვის გამოყენებით მონაცემთა რეზულტირებულ ნაკრებში ყველა
ჩანაწერზე სრულდება აგრეგირება, ხოლო distinct - მხოლოდ უნიკალურ ჩანაწერებზე,
გულისხმობით გამოიყენება ALL.
აგრეგირებული ფუნქციის შესრულება ხორციელდება ცხრილის რომელიმე ველის
მნიშვნელობის ან ჩანაწერთა ნაწილის გაერთიანება, რომლის შემდეგაც სრულდება
მითითებული აგრეგირება.
აგრეგირებული ფუნქცია აბრუნებს ერთადერთ მნიშვნელობას, ამიტომ ამოსარჩევ სიაში
ველების სხვა სახელებით გამოყენება აკრძალულია.
მაშასადამე, აგრეგირებული ფუნქციები საშუალებას იძლევა ცხრილიდან მიიღოთ ის
ინფორმაცია, რომელიც ცხრილის სტრიქონთა ჯგუფზე ოპერაციით სრულდება.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს სტუდენტების მიერ


გამოცდებებზე მიღებულ საშუალო ქულას:

SELECT AVG(Gamocda) AS N'საშუალო'


FROM [students].[dbo].[shefaseba]

მოთხოვნის შესრულების შედეგად მიიღება ერთი მნიშვნელობა (სურ.5.89):

სურ.5.89. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილში დაითვლის სტრიქონთა რაოდენობას:

SELECT COUNT(*) AS N'მთვლელი'


FROM [students].[dbo].[studentebi]

მოთხოვნის შესრულების შედეგად მიიღება ერთი მნიშვნელობა (სურ.5.90):


77
სურ.5.90. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილში დაითვლის Gamocda ველის


სტრიქონთა (ჩანაწერთა) რაოდენობას:

SELECT COUNT(Gamocda) AS N'მთვლელი'


FROM [students].[dbo].[shefaseba]

მოთხოვნის შესრულების შედეგად მიიღება ერთი მნიშვნელობა (სურ.5.91):

სურ.5.91. მოთხოვნის შედეგი

DISTINCT და ALL არგუმენტები აკეთებს, შესაბამისად, გამორიცხავს და ტოვებს COUNT


ფუნქციით დამუშავებულ განმეორებულ მნიშვნელობებს.

78
ლექცია №6

5.4. მონაცემთა დაჯგუფება

ცხრილის სტრიქონების გარკვეული კრიტერიუმის მიხედვით დაჯგუფებისათვის


გამოიყენება GROUP BY ოპერატორი (საკვანძო სიტყვა), რაც საშუალებას იძლევა თითოეული
ჯგუფისათვის გამოიყენოთ აგრეგირებული ფუნქცია. GROUP BY საკვანძო სიტყვის სინტაქსია:

[ GROUP BY [ ALL ] სვეტების_სია [,…] ]

განვიხილოთ არგუმენტების დანიშნულება:


 სვეტების_სია არგუმენტში ეთითება იმ სვეტების სახელები, რომელთა მიხედვით უნდა
შესრულდეს დაჯგუფება.
 ALL. თუ მოთხოვნაში განსაზღვრულია პირობა, რომელიც ზღუდავს ამოსარჩევი
სტრიქონების დაჯგუფების დიაპაზონს, მაშინ GROUP BY განყოფილებაში ALL სიტყვის
გამოყენება გამოიწვევს ყველა ჯგუფის გამოტანას. აგრეგირების ფუნქცია არ შესრულდება იმ
ჯგუფებისათვის, რომლებიც არ აკმაყოფილებენ მოთხოვნაში მითითებულ პირობას.
თითოეული განსაზღვრული ჩანაწერისათვის GROUP BY გამოყენებისას მიიღება მხოლოდ
ერთი ჩანაწერი მონაცემთა საბოლოო შედეგში.
ჩანაწერთა დაჯგუფებისას დაშვებულია აგრეთვე WHERE ოპერატორის გამოყნება. ამ
შემთხვევაში ჯგუფდება ჩანაწერბი, რომლებიც აკმაყოფილებენ მოცემულ პირობას.
WHERE ოპერატორი საშუალებას იძლევა განსაზღვროთ, თუ რომელ ჩანაწერებს ეძლევა
დაჯგუფება, ხოლო HAVING ოპერატორი - მონაცემთა საბოლოო ნაკრებში, თუ რომელი ჯგუფი
უნდა გამოვიდეს. HAVING საკვანძო სიტყვა შეიძლება გამოიყენოთ მხოლოდ GROUP BY
ოპერატორში.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილში იპოვის თითიეული სტუდენტის მიერ


გამოცდაში მიღებული ნიშნებიდან მაქსიმალურ მნიშვნელობას:

SELECT Kodi, MAX(Gamocda) AS N'მაქსიმალური'


FROM [students].[dbo].[shefaseba]
GROUP BY Kodi

79
მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.92):

სურ.5.92. მოთხოვნის შედეგი

shefaseba ცხრილიდან ამორჩეული ჩანაწერები Kodi ველის მნიშვნელობებით დალაგდება


GROUP BY ფრაზის მითითებით. ყოველ ჯგუფში არსებობს Gamocda ველის მაქსინალური
მნიშვნელობა. GROUP BY საშუალებას იძლევა გამოიყენოთ სასურველი ფუნქცია ყოველი
ჯგუფისათვის. მოცემულ მოთხოვნაში განიხილება ჩანაწერთა ჯგუფი, რომელიც
დაჯგუფებულია სტუდენტების იდენტიფიკატორით.
დაჯგუფების კონსტრუქციაში შეიძლება გამოყენებული იყოს ერთ სვეტზე მეტი.

ბ) დაწერეთ მოთხოვნა, რომელიც თითოეული საგნის მიხედვით shefaseba ცხრილში იპოვის


თითიეული სტუდენტის მიერ გამოცდაში მიღებული ნიშნებიდან მაქსიმალური მნიშვნელობას:

SELECT kodi, Sagani, MAX(Gamocda) AS N'მაქსიმალური'


FROM [students].[dbo].[shefaseba]
GROUP BY kodi, Sagani

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.93):

სურ.5.93. მოთხოვნის შედეგი

ამ შემთხვევაში სტრიქონები თავდაპირველად დაჯგუფდება პირველი სვეტის


მნიშვნელობების მიხედვით, ხოლო ამ ჯგუფების შიგნით – მეორე სვეტის მნიშვნელობების
მიხედვით. შევნიშნოთ, რომ მოთხოვნაში GROUP BY ფრაზის არსებობის შემთხვევაში SELECT

80
საკვანძო სიტყვის შემდეგ უნდა იყოს ყველა არჩეული სვეტი, გარდა იმ სვეტისა, რომელიც
მითითებულია ფუნქციის არგუმენტში.
HAVING განყოფილება გამოიყენება ძებნის პირობის მისათითებლად ჯგუფისთვის. მისი
სინტაქსია:

HAVING<ძებნის_პირობა>

თუ HAVING ოპერატორი (განყოფილება) გამოიყენება GROUP BY განყოფილების გარეშე,


მაშინ ის იმუშავებს WHERE განყოფილების მსგავსად. თუ HAVING განყოფილება გამოიყენება
GROUP BY ALL კონსტრუქციასთან ერთად, მაშინ HAVING ფარავს ALL სიტყვის მოქმედებას.
მაშასადამე, HAVING ოპერატორით განისაზღვრება კრიტერიუმი, WHERE ფრაზის
მზგავსად, რომლითაც გამოტანილ მონაცემებში იქნება მოცემული ჯგუფი.

გ) დაწერეთ მოთხოვნა, რომელიც თითოეული საგნის მიხედვით shefaseba ცხრილში იპოვის


თითიეული სტუდენტის მიერ გამოცდაში მიღებული ნიშნებიდან მაქსიმალური მნიშვნელობას
და გამოიტანოს იმ სტუდენტების მონაცემებს, რომლებსაც გამოცდაში მიღებული მაქსიმალური
ქულა მეტია ან ტოლი 20-ზე:

SELECT Sagani, MAX(Gamocda) AS N'მაქსიმალური'


FROM [students].[dbo].[shefaseba]
GROUP BY Sagani
HAVING MAX(Gamocda) >=20

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.94):

სურ.5.94. მოთხოვნის შედეგი

პირობა, რომელსაც HAVING ფრაზა იძლევა, მიუთითებს მხოლოდ ველს ან გამოსახულებას,


რომელსაც ყველა გამოტანილ ჯგუფისათვის აქვს ერთადერთი მნიშვნელობა.

81
5.5. გამოსატანი ველების დალაგება

როგორც ცნობილია რელაციურ მონაცემთა ბაზის ცხრილებში მონაცემები დაულაგებელია.


მაგრამ, მონაცემები, რომლებიც გამოიტანება მოთხოვნის შესრულებისას შეიძლება იყოს
დაულაგებული. ამისათვის გამოიყენება ORDER BY ოპერატორი, რომელიც საშუალებას იძლევა
გამოსატანი ჩანაწერების დაჯგუფებას შესაბამისად ერთ ან რამდენიმე ამორჩეული სვეტის
მნიშვნელობიდან. ამასთანავე შეიძლება თითოეულ სვეტს მისცეთ ზრდადობით (ASC) ან
კლებადობით (DESC) დალაგება. გულისხმობის პრინციპით მიღებულია ზრდადობით
დალაგების თანმიმდევრობა.

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს სასწავლო საგნებს და


დაალაგებს მათ სახელის მიხედვით ზრდადობით:

SELECT Sagani
FROM [students].[dbo].[shefaseba]
ORDER BY Sagani

მოთხოვნის შესრულების შედეგად მიიღება ერთ სვეტიანი ცხრილი (სურ.5.95):

სურ.5.95. მოთხოვნის შედეგი

იგივე სია, დალაგებული საპირისპირო სახით, შეიძლება მიიღოთ მოთხოვნით:

SELECT Sagani
FROM [students].[dbo].[shefaseba]
ORDER BY Sagani DESC

ბ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს ყველა ჩანაწერს და


დაალაგებს მათ გვარის მიხედვით კლებადობით:

SELECT *
FROM [students].[dbo].[studentebi]

82
ORDER BY Gvari DESC

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.96):

სურ.5.96. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს ყველა ჩანაწერს,


რომელშიც ჯერ ზრდადობით დალაგებული იქნება სტუდენტების გვარები, ხოლო გვარის
შიგნით - სახელის მიხედვით:

SELECT *
FROM [students].[dbo].[studentebi]
ORDER BY Gvari, Saxeli

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.97):

სურ.5.97. მოთხოვნის შედეგი

ORDER BY ფრაზაში ჩანაწერთა ჯგუფის დალაგებისათვის შეიძლება გამოყენებული იყოს


ფრაზა GROUP BY. ამავე დროს მოთხოვნაში ORDER BY ოპერატორი ყოველთვის უნდა იყოს
ბოლო.

დ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს ჩანაწერებს, რომელშიც


მონაცემები ჯერ დაჯგუფებული იქნება სემესტრის მიხედვით, ხოლო თითოეულ სემესტრში -
საგანის მიხედვით. გამოიტანეთ ასევე თითოეულ საგანში სტუდენტების მიერ გამოცდაში
მიღებული მაქსიმალური ქულა და დაალაგეთ ჩანაწერები სემესტრის მიხედვით:

SELECT Sagani, Semestri, MAX(Gamocda) AS N'მაქსიმალური'


83
FROM [students].[dbo].[shefaseba]
GROUP BY Semestri, Sagani
ORDER BY Semestri

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.98):

სურ.5.98. მოთხოვნის შედეგი

სვეტთა დალაგებისას მისი დასახელების ერთად შეიძლება მიუთითოთ მისი ნომერი, იმის
გათვალიწინებით, რომ მოცემულ შემთხვევაში ეს – სვეტის ნომერია, რომელც განსაზღვრავს არა
ცხრილში სვეტების ნომერს, არემედ მოთხოვნაში გამოსატანი სვეტის მონაცემებს. ველი 1
ნომრით არის პირველი ველი, მითითებული ORDER BY ფრაზაში, რომელიც დამოკიდებული
არაა მის მდებარეობაზე ცხრილში.

ე) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს ჩანაწერებს, რომელშიც


მონაცემები დალაგებული იქნება studentebi ცხრილის მეორე ველის მიხედვით:

SELECT Gvari, Saxeli


FROM [students].[dbo].[studentebi]
ORDER BY 2 DESC

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.99):

84
სურ.5.99. მოთხოვნის შედეგი

თუ ველში, რომლის დალაგებაც ხდება, არის NULL–მნიშვნელობა, მაშინ ყველა ისინი, ამ


ველის ბოლოში ან თავში იქნება ყველა დანარჩენი ჩანაწერების მიმართ.

5.6. GROUP BY ROLLUP (წინა ვერსიებში COMPUTE) ოპერატორი

ეს ოპერატორი საშუალებას გაძლევთ არჩეული სვეტების მიმართ გამოიყენოთ აგრეგირების


ფუნქციები. აგრეგირების შედეგი გაიცემა ცალკე სტრიქონის სახით, მონაცემების შემდეგ. მისი
სინტაქსია:

GROUP BY ROLLUP { { AVG | COUNT | MAX | MIN | SUM }


( გამოსახულება ) } [,...] [ BY გამოსახულება [ ,... ] ] ]

გამოსახულება არგუმენტი უნდა შეიცავდეს სააგრეგირებელი სვეტის სახელს, რომელიც


ჩართული იქნება შედეგში. BY სიტყვა მიუთითებს, რომ გამოთვლის შედეგი უნდა დაჯგუფდეს.
BY სიტყვის შემდეგ მოთავსებული გამოსახულება არგუმენტი შეიცავს იმ სვეტის სახელს,
რომლის მიხედვით უნდა შესრულდეს დაჯგუფება (COMPUTE-ის შემთხვევაში შედეგი
წინასწარ უნდა იყოს დახარისხებული ამ სვეტის მიხედვით, ე.ი. სვეტის სახელი უნდა იყოს
მითითებული SELECT მოთხოვნის ORDER BY განყოფილებაში. COMPUTE განყოფილებაში
დაუშვებელია DISTINCT საკვანძო სიტყვის გამოყენება).
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


მონაცემებს, რომელთა საბოლოოო შეფასება (კომპონენტების ჯამი) მეტია 50–ზე, ხოლო
ცხრილის ბოლოში გამოჩნდება სტუდენტების საბოლოო შეფასებების რაოდენობა და საბოლოო
შეფასებების (ქულათა) ჯამი:

SELECT kodi, I+II+III+gamocda AS N'საბოლოო შეფასება'


FROM [students].[dbo].[shefaseba]
85
WHERE I+II+III+gamocda>50
GROUP BY ROLLUP COUNT (kodi), SUM(I+II+III+gamocda)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.100):

სურ.5.100. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


მონაცემებს, რომელთა საბოლოოო შეფასება (კომპონენტების ჯამი) მეტია 50–ზე, ხოლო
თითოეული სტუდენტისათვის ცალკ–ცალკე გამოჩნდება საბოლოო შეფასებების რაოდენობა და
საბოლოო შეფასებების (ქულათა) ჯამი:

SELECT kodi, I+II+III+gamocda AS N'საბოლოო შეფასება'


FROM [students].[dbo].[shefaseba]
WHERE I+II+III+gamocda>50
GROUP BY ROLLUP COUNT (kodi), SUM(I+II+III+gamocda) BY kodi

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.101):

86
სურ.5.101. მოთხოვნის შედეგი

87
ლექცია №7

5.7. ჩადგმული მოთხოვნები

ერთ მოთხოვნას შეუძლია მეორე მოთხოვნის მართვა. ეს მიიღწევა ჩადგმული მოთხოვნების


გამოყენებით. ჩადგმული მოთხოვნა (ქვემოთხოვნა) გვაქვს მაშინ, როცა ერთი მოთხოვნის შიგნით
მეორეა მოთავსებული. შიდა მოთხოვნის მიერ გაცემული შედეგები მოწმდება გარე (ძირითადი)
მოთხოვნის პირობაში, რომელიც განსაზღვრავს ეს შედეგები ჭეშმარიტია (true) თუ მცდარი (false).
შიდა მოთხოვნებში აკრძალულია SELECT * ტიპის ბრძანების გამოყენება. შიდა
მოთხოვნებში დასაშვებია GROUP BY და HAVING საკვანძო სიტყვების გამოყენება.
მაშასადამე, ჩადგმული მოთხოვნა - ეს SELECT ოპერატორია, რომელიც შედის სხვა
მოთხოვნაში. ქვემოთხოვნა გამოიყენება რთული მოთხოვნის ლოგიკურ ეტაპებით
დაყოფისათვის. მისი გამოყენება ეფექტურია, თუ მოთხოვნა იყენებს იმ ჩანაწერებს, რომლებსაც
იძლევა სხვა მოთხოვნა.
არსებობს ორი სახის ქვემოთხოვნა:
 ჩადგმული (ჩალაგებული) ქვემოთხოვნა - აბრუნებს ერთადერთ მნიშვნელობას ან
მნიშვნელობათა სიას. ჩალაგებული ქვემოთხოვნა სრულდება ერთხელ, ხოლო შემდეგ
რეზულტირებული მნიშვნელობა გამოიყენება გარე მოთხოვნის მიერ.
 დაკავშირებული ქვემოთხოვნა - გამოიყენება გარე მოთხოვნისათვის მონაცემად,
ამასთანავე დაკავშირებული მოთხოვნა სრულდება ერთხელ გარე მოთხოვნის ყოველი
ჩანაწერისათვის.
მაგალითად:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს „ხარაძე― გვარის მქონე


სტუდენტების ჩანაწერებს (მოცემულ შემთხვევაში სტუდენტის გვარი ცნობილია, მაგრამ არაა
ცნობილი მისთვის kodi ველის მნიშვნელობა):

SELECT *
FROM [students].[dbo].[shefaseba]
WHERE kodi IN
(SELECT kodi
FROM [students].[dbo].[studentebi]
WHERE gvari =N'ხარაძე')
88
ეს მოთხოვნა მუშაობს შემდეგი თანმიმდევრობით:
o თავდაპირველად ცხრილიდან ამოირჩევა სტრიქონი, რომლის სახელიც
მითითებულია გარე მოთხოვნაში;
o სრულდება ქვემოთხოვნა და მიღებული შედეგის მნიშვნელობის ანალიზი ხდება ამ
სტრიქონისათვის გარე მოთხოვნის WHERE პირობის საშუალებით;
o ამ პირობის შეფასების შედეგით მიიღება გადაწყვეტილება გამოსატან მონაცემებში
შევიდეს თუ არ შევიდეს ეს სტრიქონი;
o პროცედურა მეორდება ცხრილის შემდეგი სტრიქონისათვის გარე მოთხოვნაში.
მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.102):

სურ.5.102. მოთხოვნის შედეგი

სასურველია ყურადღება მიაქციოთ იმ ფაქტს, რომ ზემოთ მოყვანილი მოთხოვნა


კორექტულია მხოლოდ იმ შემთხვევაში, როცა ფრჩხილებში მოთავსებული ქვემოთხოვნის
შედეგი ღებულობს ერთადერთ მნიშვნელობას. თუ ქვემოთხოვნა ღებულობს რამდენიმე
მნიშვნელობას, მაშინ ეს ქვემოთხოვნა იქნება მცდარი. მოცემულ შემთხვევაში ეს მოხდება იმ
შემთხვევაში თუ studentebi ცხრილში იქნება რამდენიმე ჩანაწერი gvari=N'ხარაძე' ველის
მნიშვნელობით.
სხვადასხვა შემთხვევებში ქვემოთხოვნის შესრულებით ერთადერთი მნიშვნელობის
მისაღებად გამოიყენება ფრაზა DISTINCT. ერთ–ერთი ფუნქციის სახე, რომელიც ყოველთვის
ავტომატურად იძლევა ნებისმიერი რაოდენობის სტრიქონისათვის ერთადერთ მნიშვნელობას, ეს
არის, აგრეგირებული ფუნქციები.
IN ოპერატორი აგრეთვე ფართოდ გამოიყენება ქვემოთხოვნებში. ის იძლევა
მნიშვნელობათა სიას, რომლებზეც შედარდება სხვა მონაცემი ამ ოპერატორით მიცემული
პრედიკატის ჭეშმარიტების განსაზღვრისათვის.
მაგალითად:

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს მეორე კურსის


სტუდენტების ყველა ჩანაწერს:
89
SELECT *
FROM [students].[dbo].[shefaseba]
WHERE kodi IN
(SELECT kodi
FROM [students].[dbo].[studentebi]
WHERE kursi=2)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.103):

სურ.5.103. მოთხოვნის შედეგი

ქვემოთხოვნა შეიძლება გამოიყენოთ HAVING ფრაზის შიგნითაც. როგორც ცნობილია


HAVING ფრაზა საშუალებას იძლევა GROUP BY ოპერატორით დაჯგუფებული ველის
ფილტრაცია გააკეთოს. ის ფასდება არა ყოველი სტრიქონის შედეგისათვის, არამედ გამოტანილი
ჩანაწერების ყოველი ჯგუფისათვის, რომელიც ფორმირებულია გარე მოთხოვნის GROUP BY
ოპერატორით.

გ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების


საშუალო ქულას, რომელიც მეტი იქნება სტუდენტების მიერ გამოცდებზე მიღებულ საშუალო
ქულაზე:

SELECT kodi, AVG(I+II+III+gamocda) AS N'საბოლოო შეფასება'


FROM [students].[dbo].[shefaseba]
GROUP BY kodi
HAVING AVG(I+II+III+gamocda)>
(SELECT AVG(gamocda)
FROM [students].[dbo].[shefaseba])

90
მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.104):

სურ.5.104. მოთხოვნის შედეგი

ქვემოთხოვნების გამოყენებისას შიგა მოთხოვნით შეიძლება მიმართოთ ცხრილს, რომელიც


მოცემულია გარე მოთხოვნის FROM ფრაზაში. ამ შემთხვევაში ასეთი დაკავშირებული
ქვემოთხოვნა სრულდება მთავარი მოთხოვნისათვის ერთჯერ ყოველი სტრიქონისათვის.

დ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


სახელსა და გვარს, რომლებსაც 2009 წლის 29 იანვარს ჩაბარებული აქვთ გამოცდა:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi] st
WHERE '29/01/2009' IN
(SELECT tarigi
FROM [students].[dbo].[shefaseba] sh
WHERE st.kodi= sh.kodi)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.105):

სურ.5.105. მოთხოვნის შედეგი

91
მოთხოვნაში st და sh გამოიყენება, როგორც ფსევდონიმები. კერძოდ, ისინი გამოიყენება
[students].[dbo].[studentebi] და [students].[dbo].[shefaseba] სახელების ნაცვლად.
შეიძლება გამოიყენოთ ქვემოთხოვნა, ცხრილის დაკავშირებისა საკუთარ (ამ ცხრილის)
ასლთან.

ე) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


მონაცემებს, რომელთა სტიპენდია იმ კურსის საშუალო სტიპენდიაზე ნაკლებია, რომელ
კურსზეც ისინი სწავლობენ (გამოიყენეთ ფსევდონიმები: E1 და E2):

SELECT DISTINCT kodi, gvari, saxeli, stipendia


FROM [students].[dbo].[studentebi] E1
WHERE stipendia<
(SELECT AVG(stipendia)
FROM [students].[dbo].[studentebi] E2
WHERE E1.kursi=E2.kursi)

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.106):

სურ.5.106. მოთხოვნის შედეგი

5.8. EXISTS ოპერატორი

ოპერატორი გასცემს true მნიშვნელობას, თუ ქვემოთხოვნა გასცემს თუნდაც ერთ სტრიქონს.


წინააღმდეგ შემთხვევაში, გაიცემა false მნიშვნელობა. მისი სინტაქსია:

EXISTS (ქვემოთხოვნა)

მაშასადამე, EXISTS (არსებობს) ოპერატორის გამოყენებით გენერირდება მნიშვნელობა


ჭეშმარიტი ან მცდარი, ისე როგორც ეს ბულის გამოსახულებაშია (ალგებრაშია). ქვემოთხოვნის
არგუმენტად გამოყენებისას, ეს ოპერატორი შეაფასებს ქვემოთხოვნის შესრულების შედეგს
როგორც ჭეშმარიტი, თუ ამ ქვემოთხოვნით გენერირდება გამოსატანი მონაცემები, ანუ ერთი
92
მაინც ნაპოვნი მნიშვნელობის არსებობის შემთხვევაში. წინაღმდეგ შემთხვევაში ქვემოთხოვნის
შედეგი იქნება მცდარი. EXISTS ოპერატორს არ შეუძლია მიიღოს unknown მნიშვნელობა.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების პირად


ნომრებს (მონაცემებს), რომლებსაც აქვთ ერთი მაინც საბოლოო შეფასება 50 ქულაზე ნაკლები ან
ტოლი:

SELECT DISTINCT kodi


FROM [students].[dbo].[shefaseba] A
WHERE EXISTS
(SELECT *
FROM[students].[dbo].[shefaseba] B
WHERE I+II+III+gamocda<=50 AND A.kodi=B.kodi)

მოთხოვნის შესრულების შედეგად მიიღება ერთ სვეტიანი ცხრილი (სურ.5.107).

სურ.5.107. მოთხოვნის შედეგი

შენიშვნა: დაკავშირებული ქვემოთხოვნების გამოყენებისას EXISTS ფრაზა აანალიზებს


ცხრილის თითოეულ სტრიქონს, რომელზეც გაკეთებულია მიმართვა გარე მოთხოვნიდან.
მთავარი მოთხოვნა ღებულობს სტრიქონ–კანდიდატებზე პირობის შემოწმებას. ყოველი
სტრიქონ–კანდიდატისათვის სრულდება ქვემოთხოვნა. როგორც კი ქვემოთხოვნა იპოვის
სტრიქონს, სადაც სვეტში [I+II+III+gamocda] მნიშვნელობა აკმაყოფილებს პირობას, ის წყვეტს
შესრულებას და გარე მოთხოვნას უბრუნებს მნიშვნელობას ჭეშმარიტი, რომელიც შემდგომ
აანალიზებს მის სტრიქონ–კანდიდატს.

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სასწავლო საგნების


სახელებს, რომლებშიც გამოცდები ჩააბარა არა ერთმა, არამედ რამდენიმე სტუდენტმა:

SELECT DISTINCT sagani


FROM [students].[dbo].[shefaseba] A
93
WHERE EXISTS
(SELECT *
FROM [students].[dbo].[shefaseba] B
WHERE A.sagani=B.sagani AND A.kodi<>B.kodi)

მოთხოვნის შესრულების შედეგად მიიღება ერთ სვეტიანი ცხრილი (სურ.5.108).

სურ.5.108. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სასწავლო საგნების


სახელებს, რომლებშიც გამოცდა ჩააბარა მხოლოდ და მხოლოდ ერთმა სტუდენტმა:

SELECT DISTINCT sagani


FROM[students].[dbo].[shefaseba] A
WHERE NOT EXISTS
(SELECT *
FROM [students].[dbo].[shefaseba] B
WHERE A.sagani=B.sagani AND A.kodi<>B.kodi)

მოთხოვნის შესრულების შედეგად მიიღება ერთ სვეტიანი ცხრილი (სურ.5.109).

სურ.5.109. მოთხოვნის შედეგი

შენიშვნა: ქვემოთხოვნა, რომელშიც მითითებულია EXISTS ოპერატორი არ შეიძლება


გამოყენებილი იყოს აგრეგირებული ფუნქციები.

94
დ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ მეორე კურსელი
სტუდენტების მონაცემებს, რომლებსაც ჩაბარებული აქვთ ერთ სასწავლო საგანზე მეტი:

SELECT *
FROM [students].[dbo].[studentebi] A
WHERE kursi=2 AND EXISTS
(SELECT kodi
FROM [students].[dbo].[shefaseba] B
GROUP BY kodi
HAVING COUNT(sagani)>1 AND A.kodi=B.kodi )

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.110).

სურ.5.110. მოთხოვნის შედეგი

5.8. IN, ANY და ALL შედარების ოპერატორები მრავლობითი მნიშვნელობით

შედარების ოპერატორებს მრავლობითი მნიშვნელობით აქვს შემდეგი აზრი.


IN ტოლია ნებისმიერი იმ მნიშვნელობის, რომელიც მიღებულია შიგა მოთხოვნით.
NOT IN არ არის ტოლი არცერთი იმ მნიშვნელობის, რომელიც მიღებულია შიგა
მოთხოვნით.
=ANY იგივეა რაც IN. შეესაბამება ლოგიკურ ოპერატორ OR–ს.
> ANY, >= ANY მეტია (მეტია ან ტოლი) ნებისმიერ მიღებულ რიცხვზე. ექვივალენტურია >
ან >= თვით უმცირეს მიღებულ რიცხვზე.
< ANY, <= ANY ნაკლებია (ნაკლებია ან ტოლი) ნებისმიერ მიღებულ რიცხვზე.
ექვივალენტურია < ან <= თვით უდიდეს მიღებულ რიცხვზე.
=ALL ტოლია ყველა მიღებულ მნიშვნელობის. ექვივალენტურია ლოგიკურ ოპერატორ
AND–ის.

95
> ALL, >= ALL მეტია (მეტია ან ტოლი) ყველა მიღებულ რიცხვზე. ექვივალენტურია > ან >=
თვით უდიდეს მიღებულ რიცხვზე.
< ALL, <= ALL ნაკლებია (ნაკლებია ან ტოლი) ყველა მიღებულ რიცხვზე. ექვივალენტურია <
ან <= თვით უმცირეს მიღებულ რიცხვზე.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


სახელსა და გვარს, რომლებსაც 2009 წლის 29 იანვარს ჩაბარებული აქვთ გამოცდა:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi] st
WHERE '29/01/2009' IN
(SELECT tarigi
FROM [students].[dbo].[shefaseba] sh
WHERE st.kodi= sh.kodi)
ან
SELECT saxeli, gvari
FROM [students].[dbo].[studentebi] st
WHERE '29/01/2009' =ANY
(SELECT tarigi
FROM [students].[dbo].[shefaseba] sh
WHERE st.kodi= sh.kodi)

ორივე მოთხოვნის შესრულების შედეგად მიიღება ერთიდაიგივე ცხრილი (სურ.5.111).

სურ.5.111. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომელიც shefaseba ცხრილიდან გამოიტანს იმ სტუდენტების kodi


ველს, რომელთა საბოლოო შეფასება ერთ–ერთ იმ საბოლოო შეფასებაზე მეტია, რომელიც მათ
მიღებული აქვთ 2009 წლის 29 იანვარს:

96
SELECT kodi
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+gamocda >ANY
(SELECT I+II+III+gamocda
FROM [students].[dbo].[shefaseba]
WHERE tarigi='29/01/2009')

მოთხოვნის შესრულების შედეგად მიიღება ერთ სვეტიანი ცხრილი (სურ.5.112).

სურ.5.112. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


სახელსა და გვარს, რომელთა საბოლოო შეფასება ერთ–ერთ იმ საბოლოო შეფასებაზე მეტია,
რომელიც მათ მიღებული აქვთ 2009 წლის 29 იანვარს:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi]
WHERE kodi IN
(SELECT kodi
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+gamocda >ANY
(SELECT I+II+III+gamocda
FROM [students].[dbo].[shefaseba]
WHERE tarigi='29/01/2009'))

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.113).

სურ.5.113. მოთხოვნის შედეგი

97
დ) დაწერეთ მოთხოვნა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების
სახელსა და გვარს, რომელთა საბოლოო შეფასება ყველა იმ საბოლოო შეფასებაზე ნაკლებია,
რომელიც მათ მიღებული აქვთ 2009 წლის 29 იანვარს:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi]
WHERE kodi IN
(SELECT kodi
FROM [students].[dbo].[shefaseba]
WHERE I+II+III+gamocda <ALL
(SELECT I+II+III+gamocda
FROM [students].[dbo].[shefaseba]
WHERE tarigi='29/01/2009'))

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.114).

სურ.5.114. მოთხოვნის შედეგი

შენიშვნა: NULL–მნიშვნელობის დამუშვებისას სასურველია ANY, ALL და EXISTS


ოპერატორების სხვადასხვა თავისებურებების გათვალიწინება. როცა ქვემოთხოვნა არ
გენერირებს არცერთ გამოსატან მონაცემებზე, ოპერატორი ALL ავტომატურად ღებულობს
მნიშვნელობას ჭეშმარიტი, ხოლო ANY ოპერატორი – მცდარი. NULL–მნიშვნელობა ქმნის
გარკვეულ პრობლემებს ამ ოპერატორების გამოყენებისას. როცა SQL ადარებს ორ მნიშვნელობას
ერთ–ერთი NULL–მნიშვნელობით, შედეგად მიიღება UNKNOWN მნიშვნელობას. UNKNOWN და
ასევე FALSE ქმნიან სიტუაციას, როცა სტრიქონი არ შედის გამოტანილ მონაცემებში, მაგრამ
შედეგი სხვადასხვა ტიპის მოთხოვნებში იქნება განსხვავებული, რომელიც დამოკიდებული
იქნება მოთხოვნაში ANY ან ALL გამოყენებაზე EXISTS ერთად.

5.9. გაერთიანების UNION ოპერატორი

98
UNION ოპერატორი გამოიყენება ორი ან მეტი SQL–მოთხოვნით გამოსატანი (რამდენიმე
სვეტი და სტრიქონი) მონაცემების გაერთიანებისათვის.
UNION ოპერატორის გამოყენება შესაძლებელია მხოლოდ ისეთი მოთხოვნების
გაერთანებისათვის, რომელთა შესაბამისი სვეტები თანხვედრაშია (ერთნაირია)
გაერთიანებისათვის. მაშასადამე, შესაბამისი რიცხვითი ველი ზუსტად უნდა ემთხვეოდეს
მონაცემთა ტიპს და ზომას, ხოლო სიმბოლური ველი ზუსტად უნდა ემთხვეოდეს სიმბოლოთა
რაოდენობას. თუ NULL–მნიშვნელობა აკრძალულია გამაერთიანებელი მოთხოვნის ერთი
რომელიმე სვეტისათვის, მაშინ ის აკრძალული იქნება ყველა შესაბამისი სვეტისათვის სხვა
გამაერთიანებელ ქვემოთხოვნებში.
ჩვეულებრივი მოთხოვნისაგან განსხვავებით UNION ავტომატურად გამორიცხავს
გამოსატანი მონაცემებიდან დუბლირებულ სტრიქონებს.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც გაერთიანებული იქნება


studentebi და studentebi_2 ცხრილებში არსებული ორი ველი: saxeli და gvari:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi]
UNION
SELECT saxeli, gvari
FROM [students].[dbo].[studentebi_2]

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.115).

სურ.5.115. მოთხოვნის შედეგი

თუ მოთხოვნით მაინცდამაინც აუცილებელია ყველა სტრიქონის გამოტანა,


იმისდამიუხედავად არის თუ არა ის სხვა გამაერთიანებელ მოთხოვნაში, მაშინ მრავალი
მოთხოვნის კონსტრუქციაში გამოიყენება UNION ALL ოპერატორი.

99
ბ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც გაერთიანებული იქნება
studentebi და studentebi_2 ცხრილებში არსებული ორი ველის ყველა ჩანაწერი: saxeli და gvari:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi]
UNION ALL
SELECT saxeli, gvari
FROM [students].[dbo].[studentebi_2]

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.116).

სურ.5.116. მოთხოვნის შედეგი

ORDER BY ფრაზა გამოიყენება, როგორც გაერთიანებული მოთხოვნით გამოტანილი


მონაცემების დალაგებისათვის, ასევე ცალკე მოთხოვნისათვის.

გ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც გაერთიანებული იქნება


studentebi და studentebi_2 ცხრილებში არსებული ორი ველი: saxeli და gvari და მეორე სვეტის
მიხედვით ჩანაწერები დალაგდება კლებადობით:

SELECT saxeli, gvari


FROM [students].[dbo].[studentebi]
UNION
SELECT saxeli, gvari
FROM [students].[dbo].[studentebi_2]
ORDER BY 2 DESC

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.117).

100
სურ.5.117. მოთხოვნის შედეგი

შენიშვნა: ხშირად არის შემთხვევა, როცა ორი მოთხოვნის გაერთიანებისას, მეორე


მოთხოვნა ირჩევს სტრიქონებს, რომელსაც პირველი მოთხოვნა უკეთებს იგნორირებას. ასეთ
ოპერაციას უწოდებენ გარე გაერთიანებას.

5.10. ცხრილების შეერთების JOIN ოპერატორი

თუ SELECT ოპერატორში საკვანძო სიტყვა FROM–ში მითითებულია არა ერთი, არამედ ორი
ცხრილი, მაშინ ასეთი მოთხოვნის შესრულებისას, რომელშიც არაა WHERE ფრაზა, პირველი
ცხრილის თითოეული სტრიქონი შეუერთდება მეორე ცხრილის შესაბამის სტრიქონს. ასეთ
ოპერაციას უწოდებენ მონაცემთა ბაზის ცხრილების სრულ (CROSS) შეერთებას (დეკარტული
ნამრავლი). ცხრილების შეერთებას მაშინ აქვს აზრი, როცა შესაერთებელია საწყისი ცხრილის არა
ყველა სტრიქონი, არამედ მომხმარებლის მიერ არჩეული.
მოთხოვნაში INNER საკვანძო სიტყვა შეიძლება გამოტოვოთ, რადგანაც JOIN ოპერატორში
ის მოქმედებს გულისხმობის პრინციპით.
მაგალითები:

ა) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც შეერთებული იქნება


studentebi ცრილის ორი (gvari და saxeli ველები) და shefaseba ცხრილის (I, II, III და gamocda
ველები) ოთხი სვეტი:

SELECT students.dbo. studentebi.gvari, students.dbo. studentebi.saxeli,


students.dbo. shefaseba.I, students.dbo. shefaseba.II, students.dbo. shefaseba.III,
students.dbo. shefaseba.gamocda
FROM students.dbo. studentebi INNER JOIN students.dbo. shefaseba
ON students.dbo. studentebi.kodi = students.dbo. shefaseba.kodi

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.118):


101
სურ.5.118. მოთხოვნის შედეგი

ბ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც მარცხენა შეერთებით


იქნება studentebi ცხრილის ორი (gvari და saxeli ველები) და shefaseba ცხრილის (I, II, III და
gamocda ველები) ოთხი სვეტი (ასეთი შეერთებისას studentebi ცხრილის ისეთი სტრიქონიც
გამოვა, რომელსაც shefaseba ცხრილში შესაბამისი მონაცემი არ აქვს):

SELECT students.dbo. studentebi.gvari, students.dbo. studentebi.saxeli,


students.dbo. shefaseba.I, students.dbo. shefaseba.II, students.dbo. shefaseba.III,
students.dbo. shefaseba.gamocda
FROM students.dbo. studentebi LEFT OUTER JOIN students.dbo. shefaseba
ON students.dbo. studentebi.kodi = students.dbo. shefaseba.kodi

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.119):

სურ.5.119. მოთხოვნის შედეგი

გ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც მარჯვენა შეერთებით


იქნება studentebi ცხრილის ორი (gvari და saxeli ველები) და shefaseba ცხრილის (I, II, III და
gamocda ველები) ოთხი სვეტი (ასეთი შეერთებისას shefaseba ცხრილის ისეთი სტრიქონიც გამოვა,
რომელსაც studentebi ცხრილში შესაბამისი მონაცემი არ აქვს):

102
SELECT students.dbo. studentebi.gvari, students.dbo. studentebi.saxeli,
students.dbo. shefaseba.I, students.dbo. shefaseba.II, students.dbo. shefaseba.III,
students.dbo. shefaseba.gamocda
FROM students.dbo. studentebi RIGHT OUTER JOIN students.dbo. shefaseba
ON students.dbo. studentebi.kodi = students.dbo. shefaseba.kodi

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.120):

სურ.5.120. მოთხოვნის შედეგი

დ) დაწერეთ მოთხოვნა, რომლითაც მიიღება ცხრილი, რომელშიც მონაცემთა ბაზის


ცხრილების (studentebi და shefaseba) სრული (CROSS) შეერთება იქნება წარმოდგენილი:

SELECT students.dbo. studentebi.gvari, students.dbo. studentebi.saxeli,


students.dbo. shefaseba.I, students.dbo. shefaseba.II, students.dbo. shefaseba.III,
students.dbo. shefaseba.gamocda
FROM students.dbo. studentebi, students.dbo. shefaseba

ან

SELECT students.dbo. studentebi.gvari, students.dbo. studentebi.saxeli,


students.dbo. shefaseba.I, students.dbo. shefaseba.II, students.dbo. shefaseba.III,
students.dbo. shefaseba.gamocda
FROM students.dbo. studentebi CROSS JOIN students.dbo. shefaseba

მოთხოვნის შესრულების შედეგად მიიღება ცხრილი (სურ.5.121):

სურ.5.121. მოთხოვნის შედეგი

103
შენიშვნა: ცხრილების შიგა (INNER) შეერთების გამოყენებისას, შეერთდება მხოლოდ და
მხოლოდ ის სტრიქონთა ველების მნიშვნელობები, რომელიც მითითებულია მოთხოვნის
WHERE ფრაზაში. მაგრამ ამან შეიძლება გარკვეული სახის ინფორმაციის დაკარგვა გამოიწვიოს.
ხშირად მონაცემთა ბაზიდან ინფორმაციის მისაღებად აუცილებელია ცხრილის შეერთება
საკუთარ ასლთან.

104
ლექცია №8

გრაფიკული ინტერფეისის Management Studio უტილიტის


საშუალებით მოთხოვნებისა და ფილტრების შექმნა

Microsoft SQL Server 2008-ის ობიექტთა მიმომხილველის Views ფოლდერში ინახება


მონაცემთა ბაზის ყველა მოთხოვნა.
ვთქვათ, შესაქმნელია მოთხოვნა „მოთხოვნა studentebi+shefaseba‖, რომელიც studentebi და
shefaseba ცხრილებს აკავშირებს ერთმანეთთან kodi ველის მიხედვით. ახალი მოთხოვნის
შესაქმნელად ობიექტთა მიმომხილველში students მონაცემთა ბაზის Views ფოლდერზე
გამოიძახეთ კონტექსტური მენიუ და შეასრულეთ New View ბრძანება, ეკრანზე გამოვა Add Tablle
ფანჯარა, რომელშიც შეგიძლიათ აირჩიოთ ცხრილები და მოთხოვნები, რომლებიც
მონაწილეობენ ახალ მოთხოვნაში (სურ.6.1).

სურ.6.1. ახალი მოთხოვნის შექმის დაწყების ფანჯარა

დაამატეთ ახალ მოთხოვნას studentebi და shefaseba ცხრილები. ამისათვის Add Tablle


ფანჯარაში მონიშნეთ studentebi ცხრილი და დააწკაპუნეთ Add ღილაკზე, ანალოგიურად
დაამატეთ shefaseba ცხრილი. ცხრილების დამატების შემდეგ დახურეთ Add Tablle ფანჯარა
(მაუსი დააწკაპუნეთ Close ღილაკზე). ეკრანზე გამოვა მოთხოვნის კონსტრუქტორის ფანჯარა
(სურ.6.2).

მოთხოვნის კონსტრუქტორის ფანჯარა (სურ.6.2) შედგება შემდეგი პანელებისაგან:


1. მონაცემთა სქემა - მოჩანს მოთხოვნაში მონაწილე ცხრილებისა და მოთხოვნების
ველები. შეგიძლიათ აირჩიოთ წარმოდგენილი ველებისაგან ნებისმიერი. აგრეთვე საშუალება
გეძლევათ მოთხოვნაში მონაწილეებს შორის სპეციალური ველების საშუალებით კავშირების

გაკეთების. ამ პანელის ჩართვა და გამორთვა ხორციელდება ინსტრუმენტთა პანელის


ღილაკის საშუალებით;

105
2. ველთა წარმოდგენის ცხრილი. Column სვეტში ჩანს ცხრილებიდან არჩეული
ველები. Alias სვეტი საშუალებას იძლევა ველებს მისცეთ ფსევდონიმები. Sort Tupe სვეტი
საშუალებას იძლევა დალაგების ტიპის არჩევას ერთი ან რამდენიმე ველის მიხედვით. Sort Order
სვეტი საშუალებას იძლევა დალაგების თანმიმდევრობის მიცემას. Filter და Or სვეტები
საშუალებას იძლევა ფილტრებში ჩანაწერთა პირობის მიცემას. ასევე ეს პანელი საშუალებას -
იძლევა მოთხოვნაში ველთა თანმიმდევრობას შეცვლის. ამ პანელის ჩართვა და გამორთვა
ხორციელდება ინსტრუმენტთა პანელის ღილაკის საშუალებით;
3. SQL კოდი - T–SQL ენაზე შექმნილი მოთხოვნის კოდი, ამ პანელის ჩართვა და
გამორთვა ხორციელდება ინსტრუმენტთა პანელის ღილაკის საშუალებით;
4. შედეგი - გიჩვენებთ მოთხოვნის შესრულების შედეგს. ამ პანელის ჩართვა და
გამორთვა ხორციელდება ინსტრუმენტთა პანელის ღილაკის საშუალებით.

სურ.6.2. ახალი მოთხოვნის შექმის ფანჯარა

შენიშვნა: თუ აუცილებელია Add Tablle ფანჯარის ხელმეორედ გააქტიურება, მაშინ


Microsoft SQL Server 2008-ის ინსტრუმენტთა პანელზე დააწკაპუნეთ ღილაკზე. თუ
აუცილებელია მონაცემთა სქემიდან ცხრილის ან მოთხოვნის წაშლა, მაშინ საჭიროა წასაშლელ
ობიექტზე გამოიძახოთ კონტექსტური მენიუ და შეასრულოთ Remove ბრძანება.

studentebi და shefaseba ცხრილების დაკავშირებისათვის kodi ველის მიხედვით, საჭიროა


shefaseba ცხრილიდან kodi ველი მაუსის დახმარებით გადაიტანეთ (გადაათრიეთ) studentebi
ცხრილის kodi ველზე. კავშირი გამოჩნდება შემაერთებელი ხაზის სახით.

შენიშვნა: თუ აუცილებელია კავშირის წაშლა, მაშინ დაკავშირებულ ხაზზე კონტექსტური


მენიუ გამოიძახეთ და შეარსრულეთ Remove ბრძანება. ცხრილების დაკავშირების შემდეგ (ან
106
მოთხოვნაში ნებისმიერი ცვლილებისას) T-SQL კოდის არეში გამოსახული იქნება
გასარედაქტირებელი მოთხოვნის T-SQL კოდი.

მოთხოვნის შესრულების შემდეგ თუ რომელი ველები გამოჩნდეს მოთხოვნის შედეგში (ან


არ გამოჩნდეს), საჭიროა მონაცემთა სქემაში ველის მარცხნივ კვადრატში ნიშანი უნდა იყოს
(არ იყოს) ჩასმული.

შენიშვნა: თუ გსურთ ცხრილის ყველა ველის წარმოდგენა მოთხოვნის შედეგში, მაშინ ALL
Columns პუნქტის მარცხნივ მდებარე ცარიელ კვადრატში ჩასვით ნიშანი.

ახალ მოთხოვნაში განსაზღვრეთ სასურველ ველთა ნუსხა, ანუ მოთხოვნის შედეგში


რომელი ველები გსურთ იხილოთ. ამით ახალი მოთხოვნის ფორმირება სრულდება. მოთხოვნის
შესრულება ხდება ინსტრუმენთა პანელზე ! ღილაკის გააქტიურებით.

შენიშვნა: თუ მოთხოვნის შესრულების შემდეგ გამოვა შეტყობინება შეცდომის შესახებ,


მაშინ შეამოწმეთ კავშირის სისწორე. თუ მოთხოვნა შესრულდება, მაშინ საჭიროა მისი
დამახსოვრება (შენახვა). ამისათვის მოთხოვნის კონსტრუქტორის ფანჯარაში მაუსი
დააწკაპუნეთ ღილაკზე (ფანჯრის დახურვა). ეკრანზე გამოვა მოთხოვნის შენახვის ფანჯარა
(სურ.6.3). ამ ფანჯარაში დააწკაპუნეთ Yes ღილაკზე.

სურ.6.3. ახალი მოთხოვნის შენახვის ფანჯარა

ეკრანზე გამოვა Choose Name ფანჯარა (სურ.6.4). ამ ფანჯარაში შეიტანეთ ახალი მოთხოვნის
სახელი (მაგალითად, „მოთხოვნა studentebi+shefaseba‖) და დააწკაპუნეთ OK ღილაკზე. მოთხოვნა
გამოჩნდება students მონაცემთა ბაზის Views ფოლდერში.

სურ.6.4. ახალი მოთხოვნის შენახვის ფანჯარა

107
შექმნილი მოთხოვნის გაშვება შეიძლება აგრეთვე თუ ამ მოთხოვნის – „მოთხოვნა
studentebi+shefaseba‖ კონტექსტურ მენიუში შეასრულებთ Select top 1000 rows ბრძანებას.
როგორც ცნობილია ნებისმიერი მოთხოვნის შექმნისას ხშირად საჭიროა მონაცემების
გარკვეული ამორჩევის კრიტერიუმით გაფილტვრა და/ან დალაგება. ამ მიზნის მიღწევისათვის
ველთა წარმოდგენის ცხრილის არეში საჭიროა Sort Order, Filter და Or სვეტების საჭიროების
მიხედვით შევსება.
მაგალითები:
ა) შექმენით მოთხოვნა, რომელიც გამოიტანს იმ სტუდენტების სახელსა და გვარს,
რომლებიც სწავლობენ ბაკალავრიატის მეორე კურსზე.
ამ მოთხოვნის შექმნისათვის საჭიროა სურ.6.5–ზე წარმოდგენილი ნიმუშის მიხედვით
შეადგინოთ მოთხოვნა. კერძოდ, თავდაპირველად ჩვეულებრივი წესით შექმნენით მოთხოვნა,
რომელშიც ოთხი (gvari, saxeli, safexuri და kursi) ველი იქნება. ველთა წარმოდგენის ცხრილის Sort
Order სვეტში აირჩიეთ (ჩამოშლად მენიუში აირჩიეთ 1) ზრდადობით დალაგება. Filter სვეტში
safexuri და kursi სტრიქონების შესაბამის სტრიქონში შეიტანეთ =N'ბაკალავრიატი' და =2
მონაცემთა ამორჩევის კრიტერიუმები, რომლითაც მოხდება გამოსატან მონაცემთა ფილტრაცია.
თუ მოთხოვნის შედეგში გსურთ არ გამოჩნდეს safexuri და kursi სვეტები, ამისათვის Output
სვეტში წაშალეთ ნიშანი.
მონაცემთა სქემის არეში გამოჩნდება თუ რომელი ველის მიმართ გამოიყენება დალაგების
ბრძანება და რომელი ველების მიმართ გამოყენებულია ფილტრი.

სურ.6.5. ახალი მოთხოვნის ამორჩევის კრიტერიუმებითშექმნის ფანჯარა

108
ბ) შექმენით მოთხოვნა, რომელიც გამოიტანს იმ სტუდენტების სახელს, გვარს და საბოლოო
შეფასებას, რომლებიც სწავლობენ ბაკალავრიატის მეორე კურსზე.

სურ.6.6. ახალი მოთხოვნის ამორჩევის კრიტერიუმებითშექმნის ფანჯარა

ამ მოთხოვნის შექმნისათვის საჭიროა სურ.6.6–ზე წარმოდგენილი ნიმუშის მიხედვით


შეადგინოთ მოთხოვნა. კერძოდ, თავდაპირველად ჩვეულებრივი წესით შექმნენით მოთხოვნა,
რომელშიც რვა (gvari, saxeli, safexuri, kursi, I, II, III და gamocda) ველი იქნება. ველთა წარმოდგენის
ცხრილის Sort Order სვეტში აირჩიეთ (ჩამოშლად მენიუში აირჩიეთ 1) ზრდადობით დალაგება.
Filter სვეტში safexuri და kursi სტრიქონების შესაბამის სტრიქონში შეიტანეთ =N'ბაკალავრიატი'
და kursi =2 მონაცემთა ამორჩევის კრიტერიუმები, რომლითაც მოხდება გამოსატან მონაცემთა
ფილტრაცია.
საბოლოო შეფასების გამოსათვლელად Column სვეტის ახალ (მეცხრე) სტიქონში შეიტანეთ
dbo.shefaseba.I + dbo.shefaseba.II + dbo.shefaseba.III + dbo.shefaseba.gamocda გამოსახულება. Alias
სვეტში შეიტანეთ [saboloo shefaseba] ფრაზა და შეასრულეთ მოთხოვნა.

შენიშვნა: ზემოთ აღწერილი ანალოგიური წესით შეგიძლიათ ნებისმიერი სახის ახალი


მოთხოვნა შექმნათ, რომელშიც გამოყენებული იქნება (არ იქნება) მონაცემთა ამორჩევისა და
დალაგების კრიტერიუმები.

109
ლექცია №9

შენახული პროცედურები

შესავალი. შენახული პროცედურა (Stored procedure) – ეს Transact_SQL ოპერატორების


სახელდებული ერთობლიობაა (ნაკრებია), რომელიც ინახება სერვერზე. ის მონაცემთა ბაზის
დამხმარე ობიექტია.
შენახული პროცედურის დახმარებით კლიენტსა და სერვერს შორის ურთიერთქმედების
ორგანიზება წარმოადგენს შემდეგს: კლიენტი ცნობილი სახელით იძახებს ბრძანებების ბლოკს,
რომელიც სერვერის მონაცემთა ბაზაში ინახება, სერვერი ასრულებს ამ ბრძანებების ბლოკს და
უბრუნებს კლიენტს რეზულტატს. მაშასადამე, შენახული პროცედურის გამოყენება ამცირებს
ქსელურ ტრაფიკს და კლიენტების მოთხოვნების რაოდენობას. ვინაიდან ქსელით რამდენიმე
ოპერატორის გაგზავნის ნაცვლად გადაეცემა გამოსაძახებელი პროცედურის სახელი.
შენახული პროცედურები წარმოადგენს მონაცემთა ბაზის დამოუკიდებელ ობიექტებს,
რომლისთვისაც შეიძლება ნებადართული ან აკრძალული იყოს GRANT და DENY ბრძანებებზე
წვდომა. მაგალითად, შემდეგი ბრძანების შესრულება mng მომხმარებლისათვის აკრძალავს hello
შენახული პროცედურის ბრძანებების შესრულებას:

DENY exec ON hello TO mng

შენახული პროცედურები მსგავსია სხვა დაპროგრამების ენების პროცედურებისაგან. მას


შეუძლია:
 განსხვავებული ოპერატორების ჩართვა (გამოყენება) და სხვა შენახული პროცედურების
გამოძახება;
 შესატანი პარამეტრების მიღება და აბრუნებს მნიშვნელობას გამოსატანი პარამეტრების
სახით;
MS SQL Server მხარს უჭერს შენახული პროცედურების შემდეგ სახეებს:
 სისტემური შენახული პროცედურები - ინახება master სისტემის მონაცემთა ბაზაში. მათი
სახელები იწყება sp_ პრეპიქსით. გამოიყენება სპეციალიზებული სისტემური დავალების
შესრულებისათვის: ადმინისტრირება, უსაფრთხოება და სხვა;
 მომხმარებლის მიერ განსაზღვრული შენახული პროცედურები - იქმნება, ინახება და
სრულდება მომხმარებლის მიერ იმ მონაცემთა ბაზაში, რომლისთვისაც იყო შექმნილი;

110
 დროებითი შენახული პროცედურები - წვდომადია მხოლოდ აქტიური შეერთებისას.
შეერთების დახურვის შემდეგ ის ავტომატურად წაიშლება. ასეთი პროცედურების სახელები
უნდა იწყებოდეს # სიმბოლოსაგან.
შენახულ პროცედურებთან მუშაობისათვის განკუთვნილია შემდეგი სისტემური შენახული
პროცედურები:
 sp_helptext პროცედურის_სახელი - გამოიტანს მითითებული შენახული პროცედურის
კოდს;
 sp_help პროცედურის_სახელი - მითითებული პროცედურისათვის გამოიტანს
პარამეტრების სიას და მათ მონაცემთა ტიპებს;
 sp_stored_procedures - აბრუნებს მიმდინარე მონაცემთა ბაზის შენახული პროცედურების
სიას.
როგორც MS SQL Server უმრავლესი ობიექტი შენახული პროცედურის შექმნა შეიძლება
Transact_SQL საშუალების დახმარებით ან Managament studio-ს გრაფიკული ინტერფეისის
გამოყენებით.
შენახული პროცედურის შექმნისათვის აუცილებელია შემდეგი თავისებურებების
გათვალისწინება:
 პროცედურა შეიძლება შეიცავდეს შემოუსაზღვრავ ოპერატორთა რაოდენობას, გარდა იმ
ოპერატორებისა, რომლებითაც იქმნება შემდეგი ობიექტები: პროცედურა, წარმოდგენა და სხვა.
 პოროცედურის შექმნა შეიძლება შეასრულოს sysadmin, bd_owner როლის, ან db_ddladmin
მომხმარებელმა, აგრეთვე უფლება აქვს GREATE PROC ბრძანების შესრულებისა.
 პარამეტრების რაოდენობა არ უნდა აღემატებოდეს 2100.

7.1. შენახული პროცედურის შექმნა Transact_SQL საშუალებით

შენახული პროცედურის შექმნა გულისხმობს შემდეგი ბრძანების შესრულებას:

CREATE PROCEDURE|PROC<sproc name>


[<parameter name> [<schema>.]<data type> [VARYING]
[= <default value>] [OUT[PUT]] [READONLY]
[, n...]
[WITH
RECOMPILE| ENCRYPTION | [EXECUTE AS { CALLER|SELF|OWNER|‘<user name>‘}]

111
[FOR REPLICATION]
AS
<code> | EXTERNAL NAME<assembly name>.<assembly class>.<method>

პარამეტრების აღწერა:
 პროცედურის სახელი უნდა აკმაყოფილებდეს MS SQL Server ობიექტებზე სახელის
დარქმევის წესებს;
 Parameter name განსაზღვრავს პარამეტრის სახელს (ის უნდა იწყებოიდეს @ სიმბოლოთი),
რომელიც გამოიყენება შესატანი ან გამოსატანი მონაცემების გადაცემისათვის (OUTPUT საკვანძო
სიტყვის მითითებით);
 data type მიუთითებს თუ რომელ მონაცემთა ტიპს მიეკუთვნება პარამეტრის მნიშვნელობა;
 default value - საშუალებას იძლევა გულისხმობით განსაზღვროს მნიშვნელობა, თუ
პროცედურის გამოძახებისას პარამეტრი არაა მითითებული;
 READONLY ჭდე შექმნის პარამეტრს მხოლოდ წაკითხვისათვის, თუ პარამეტრს აქვს teble
ტიპი, მაშინ READONLY მითითება აუცილებელია;
 WITH ENCRYPTION რეჟიმი კრძალავს შენახული პროცედურის მიერ შექმნილი კოდის
შემდგომ ნახვას, მისი დაშიფრვის გაკეთებით;
 RECOMPILE რეჟიმი მიუთითებს, რომ სერვერი არ ქეშირებს პროცედურის გამოყენების
გეგმაზე და პროცედურა კომპილირდება მხოლოდ შესრულების დროს.
საკვანძო სიტყვის შემდეგ AS მოდის ან Transact_SQL ბრძანებები რომლებიც შეადგენენ
პროცედურის ტანს ან აღწერილია მითითებული აგებულების .Net Framework მეთოდი.
დაშიფრვით შენახული პროცედურის შექმნის მაგალითი:

CREATE PROCEDURE studentebi_BSU


WITH ENCRYPTION
AS
SELECT saxeli, gvari
FROM [students].[dbo].[studentebi]

დარწმუნებისათვის, რომ თავდაპირველი პროცედურის ტექსტი მიუწვდომელია, შეიძლება


შეასრულოთ შემდეგი კოდი:

EXEC sp_helptext 'studentebi_BSU'

112
შესრულების შედეგად მიიღება:

The text for object 'studentebi_BSU' is encrypted

ეს ნიშნავს, რომ 'studentebi_BSU' ობიექტის ტექსტი დაშიფრულია.

7.2. შენახული პროცედურის შესრულება Transact_SQL საშუალებით

შენახული პროცედურა შეიძლება შესრულდეს EXECUTE ოპერატორის გამოყენებით:

EXEC[UTE]
[@დაბრუნების_სტატუსი =] პროცედურის_სახელი
[[@პარამეტრი=] {მნიშვნელობა | გამოსახულება} [OUTPUT] ] [,...]

გამოსატანი პარამეტრის გამოყენებისას, პროცედურის შექმნისას ის შეიძლება აღწეროთ


OUTPUT საკვანძო სიტყვით. აგრეთვე გამოიყენოთ ეს სიტყვა შესაბამისი პარამეტრის
მითითებისას პროცედურის გამოძახებისას. წინააღმდეგ შემთხვევაში პროცედურა არ გასცემს
გამოსატან მნიშვნელობას.
@დაბრუნების_სტატუსი პარამეტრი გამოიყენება შენახული პროცედურის დაბრუნების
კოდის მნიშვნელობის მიღებისათვის, რომლის შესრულებაც შეიძლება RETURN სტატუსი
ოპერატორის დახმარებით. მომხმარებლისათვის რეკომენდირებულია სტატუსის დადებითი
მნიშვნელობის გამოყენება.

7.3. შენახული პროცედურის მართვა Transact_SQL საშუალებით

ცვლილება
არსებული პროცედურის ცვლილებებისას გამოიყენება ALTER PROC ოპერატორი. ამ
ბრძანების პარამეტრები ანალოგიურია პროცედურის შექმნის ბძანებებისა.

სახელის შეცვლა
ამისათვის აუცილებელია გამოიყენოთ სპეციალური სისტემური შენახული პროცედურა:

sp_rename 'ობიექტის_სახელი', 'ობიექტის_ახალი_სახელი'

113
წაშლა
შენახული პროცედურის წაშლისათვის გამოიყენება Transact_SQL ბრძანება:

DROP PROC პროცედურის_სახელი

7.4. შენახული პროცედურების შექმნა Managament studio უტილიტის საშუალებით

შენახული პროცედურის შესაქმნელად Managment studio უტილიტის საშუალებით საჭიროა


მონიშნოთ თქვენი მონაცემთა ბაზის (მაგალითად, students) Programmability/Stored Procedures ფოლდერი
(სურ.7.1).

სურ.7.1. ობიექტების მიმოხილვის ფანჯარა

მაგალითები:
ა) შექმენით პროცედურა, რომელიც გამოითვლის სამი რიცხვის საშუალოს. ახალი შენახული
პროცედურის შექმნისათვის Stored Procedures ფოლდერის კონტექსტურ მენიუში შეასრულეთ NewStored
Procedures ბრძანება. ეკრანზე გამოვა ახალი შენახული პროცედურის კოდი (სურ.7.2)

5
114
სურ.7.2. შენახული პროცედურის ფანჯარა

შენახულ პროცედურას აქვს შემდეგი სტრუქტურა (სურ.7.2):


1. პროცედურის სინტაქსის პარამეტრების გაწყობათა არე. საშუალებას იძლევა, რომელიმე
სინტაქსური წესების გაწყობას, რომელიც გამოიყენება პროცედურის კოდის აკრეფისას. ამ შემთხვევაში ეს
არის:
 SET ANSI_NULLS ON - ნებას რთავს ANSI კოდში გამოყენებული იქნას NULL (ცარიელი)
მნიშვნელობა;
 SET QUOTED_IDENTIFIER ON - რთავს შესაძლებლობას გამოიყენოთ ორმაგი ბრჭყალები
იდენტიფიკატორების განსაზღვრისათვის.
2. პროცედურის სახელის (procedure_name) განსაზღვრისა და პროცედურისათვის გადასაცემი
პარამეტრების (@ param1, @ param2) არე. პარამეტრების განსაზღვრას აქვს შემდეგი სინტაქსი:
@ < პარამეტრის სახელი >< მონაცემთა ტიპი >= < მნიშვნელობა გულისხმობით >
პარამეტრები ერთმანეთისაგან გამოიყოფა მძიმით;
3. პროცედურის ტანის დასაწყისი, აღნიშნულია BEGIN საკვანძო სიტყვით;
4. პროცედურის ტანი, შეიცავს T_SQL მოთხოვნების დაპროგრამების ენის ბრძანებებს;
5. პროცედურის ტანის დასასრული აღინიშნება END საკვანძო სიტყვით.

შენიშვნა: კოდში მწვანე ფერით გამოყოფილია კომენტარები. ისინი სერვერის მიერ არ დამუშავდება
და ასრულებს კოდის გარჩევის ფუნქციას. კომენტარების სტრიქონი იწყება ‘‘—‘‘ ქვესტრიქონით.
შემდგომში კოდში სასურველია არ გამოსახოთ კომენტარები, ანუ ისინი ჩაკეცეთ. კომენტარების მარცხენა
მხარეს არის + ნიშანი, რომელზეც მაუსის დაწკაპუნებით შეგიძლიათ გახსნათ კომენტარი.
აკრიფეთ პროცედურის კოდი, რომელიც გამოითვლის სამი რიცხვის საშუალოს, ისე როგორც ეს
სურათ 7.3-ზეა ნაჩვენები

სურ.7.3. შენახული პროცედურის კოდი – სამი რიცხვის საშუალო

115
მოცემული პროცედურის კოდი შეიცავს (სურ.7.3):
1. GREATE PROCEDURE [sami ricxvis sashualo] - განსაზღვრავს შესაქმნელი პროცედურის
სახელს, როგორც ‖ სამი რიცხვის საშუალო ‖;
2. @Value1 Real=0, @Value2 Real=0, @Value3 Real=0 - განსაზღვრავს პროცედურის სამ Value1,
Value2, და Value3 პარამეტრს. მოცემულ პარამეტრს შეიძლება მისცეთ წილადური რიცხვი (Real ტიპის
მონაცემი), გულისხმობით მნიშვნელობა 0-ის ტოლია.
3. SELECT 'sashualo mnishvneloba'=(@Value1+@Value2+@Value3)/3 - ითვლის საშუალო
მნიშვნელობას და გამოიტანს შედეგს წარწერით ‘‘საშუალო მნიშვნელობა‘‘.
კოდის დანარჩენი ფრაგმენტი განხილული იყო ადრე (სურ.7.2).
პროცედურის შექმნისათვის, ზემოთ აღნიშნული კოდის შესრულება, რისთვისაც ინსტრუმენტთა
პანელზე მაუსი დააწკაპუნეთ !Execute ღილაკზე. ფანჯრის ქვედა ნაწილში გამოჩნდება ―Command(s)
completed successfully.‘‘ შეტყობინება. დახურეთ კოდის შემცველი ფანჯარა (x ღილაკი).
ახალი შენახული პროცედურის გაშვებისათვის, რომლითაც შემოწმდება შექმნილი შენახული
პროცედურის მუშაობა, აუცილებელია ახალი ცარიელი მოთხოვნის შექმნა, რისთვისაც ინსტრუმენტთა
პანელზე მაუსი დააწკაპუნეთ New Query ღილაკზე. წარმოდგენილ ფანჯარაში ცარიელი მოთხოვნით
შეიტანეთ EXEC [sami ricxvis sashualo] 2, 3, 9 ბრძანება და ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ
!Execute ღილაკზე (სურ.7.4).
ფანჯრის ქვედა ნაწილში გამოჩნდება ახალი შენახული პროცედურის შედეგი: ―საშუალო
მნიშვნელობა‖ 4, 66667 (სურ.7.4).

სურ.7.4. სამი რიცხვის საშუალო

ბ) შექმენით შენახული პროცედურა, რომელიც studentebi ცხრილიდან გამოიტანს სტუდენტის


სახელისა და გვარის მითითებით შესაბამის ჩანაწერს. ამისათვის საჭიროა ახალი შენახული პროცედურის
შექმნა, როგორც ეს ზემოთ იყო აღწერილი და შეიტანეთ ახალი პროცედურის კოდი, როგორც ეს 7.5
სურათზეა წარმოდგენილი.

116
1

სურ.7.5. შენახული პროცედურის კოდი – სტუდენტების სახელი და გვარი

‘‘სტუდენტების წარმოდგენა სახელითა და გვარის მიხედვით‘‘ პროცედურის კოდი (სურ.7.5)


შეიცავს:
1. CREATE PROCEDURE [studentebis gamotana saxelita da gvaris mixedvit] - განსაზღვრავს
შესაქმნელი პროცედურის სახელს, როგორც ‘‘სტუდენტების წარმოდგენა სახელითა და გვარის
მიხედვით‘‘;
2. @saxeli varchar(15)= ' ' , @ gvari varchar(15)= ' ' - განისაზღვრება პროცედურის პარამეტრები.
ამ პარამეტრებს შეიძლება მიანიჭოთ ტექსტური სტრიქონი ცვლადი სიგრძით, რომელთა სიგრძე 15
სიმბოლომდეა (varchar (15) მონაცემთა ტიპი), გულისხმობით მნიშვნელობა ტოლია ცარიელი სტრიქონის;
3. SELECT * FROM dbo.studentebi WHERE saxeli=@saxeli AND gvari=@gvari - გამოაქვს
dbo.studentebi ცხრილიდან ყველა ველი, სადაც saxeli და gvari ველების მნიშვნელობები ტოლია saxeli და
gvari პარამეტრების მნიშვნელობების (saxeli=@saxeli, gvari=@gvari);
შეასრულეთ ზემოთ აღწერილი კოდი და დახურეთ ფანჯარა კოდით, როგორც ეს ზემოთ იყო
აღწერილი.
შექმენით ახალი ცარიელი მოთხოვნა, რომლითაც შემოწმდება შექმნილი შენახული პროცედურის
მუშაობა. წარმოდგენილ ფანჯარაში (ცარიელი მოთხოვნის) შეიტანეთ EXEC [studentebis gamotana saxelita
da gvaris mixedvit] N'გია', N'ბერიძე' და ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ !Execute ღილაკზე
(სურ.7.6).
ფანჯრის ქვედა ნაწილში გამოჩნდება ‘‘სტუდენტების წარმოდგენა სახელითა და გვარით‘‘ შენახული
პროცედურის შესრულების შედეგი (სურ.7.6).

117
სურ.7.6. სტუდენტის სახელი და გვარი

გ) შექმენით შენახული პროცედურა, რომელიც studentebi ცხრილიდან გამოიტანს იმ სტუდენტების


პირად ნომერსა და საბოლოო შეფასების საშუალო ქულას, რომელთა საშუალო ქულა მეტია თქვენს მიერ
მიცემულ ქულაზე. ამ შენახული პროცედურის კოდს აქვს 7.8 სურათზე წარმოდგენილი სახე.
‘‘სტუდენტების წარმოდგენა სახელითა და გვარით‘‘ შენახული პროცედურა (სურ.7.8) შეიცავს:
1. CREATE PROCEDURE [studentebis warmodgena sashualo qulit] - განსაზღვრავს შესაქმნელი
პროცედურის სახელს, როგორც ‘‘სტუდენტების წარმოდგენა საშუალო ქულებით‘‘;
2. @Grade Real=0 - განსაზღვრავს Gradeპროცედურის პარამეტრს. პარამეტრს შეიძლება
მიანიჭოთ წილადური რიცხვი (Real მონაცემთა ტიპი), გულისხმობით მნიშვნელობა ნულის ტოლია;
3. SELECT * FROM [dbo.shefaseba] WHERE ([I+II+III+gamocda])/3> @Grade).

სურ.7.8. შენახული პროცედურის კოდი – სტუდენტების საშუალო ქულა

შეასრულეთ ზემოთ აღწერილი კოდი და დახურეთ ფანჯარა, როგორც ეს ზემოთ იყო აღწერილი. ამ
მოთხოვნის შესამოწმებლად შექმენით ახალი მოთხოვნა, რომელშიც შეიტანეთ EXEC [studentebis
warmodgena sashualo qulit] 70 ბრძანება და შეასრულეთ იგი. ფანჯრის ქვედა ნაწილში გამოჩნდება
შენახული პროცედურის შესრულების შედეგი (სურ.7.9).

118
სურ.7.9. იმ სტუდენტების kodi, რომლებსაც 70 ქულაზე მეტი აქვთ

დ) შექმენით შენახული პროცედურა, რომელიც გამოიტანს თქვენს მიერ წინასწარ მიცემულ ასაკზე
მეტი ასაკის სტუდენტებს. თანაც ასაკი ავტომატურად გამოითვლება დაბადების თარიღზე
დამოკიდებულებით.
შექმენით ახალი შენახული პროცედურა და შეიტანეთ ახალი პროცედურის კოდი, როგორც ეს 7.10
სურათზეა წარმოდგენილი.

სურ.7.10. შენახული პროცედურის კოდი – სტუდენტების ასაკი

‘‘სტუდენტების წარმოდგენა ასაკის მიხედვით‘‘ შესაქმნელად პროცედურა შეიცავს:


1. CREATE PROCEDURE [studentebis asaki] - განსაზღვრავს შესაქმნელი პროცედურის სახელს,
როგორც ‘‘სტუდენტების წარმოდგენა ასაკის მიხედვით‘‘;
2. @Age int =0 - განსაზღვრავს CREATE პროცედურის პარამეტრს. პარამეტრს შეიძლება
მიანიჭოთ მთელი რიცხვი (int მონაცემთა ტიპი), გულისხმობით მისი მნიშვნელობა ნულის ტოლია;
3. SELECT saxeli, gvari, [studentebi+].[dabadebis tarigi], 'asaki'=DATEDIFF (yy,
[studentebi].[dabadebis tarigi], GETDATE ()) - გამოიტანს studentebi+ მოთხოვნიდან (FROM studentebi ველები
saxeli, gvari, და [dabadebis tarigi]. ([studentebi+].[dabadebis tarigi]), ხოლო აგრეთვე წარმოდგენილია
სტუდენტის ასაკი ('asaki') წლებში (yy), გამოითვლის მისი დაბადების თარიღისა და მიმდინარე
თარიღიდან (DATEDIFF(yy), [studentebi+].[dabadebis tarigi], GETDATE ())). უფრო მეტიც, მიიღება

119
სტუდენტის ასაკი, რომელის Age პარამეტრი მეტია განსაზღვრულ პარამეტრებზე (DATEDIFF(yy),
[studentebi+].[dabadebis tarigi], GETDATE ())>@Age).

შენიშვნა: DATEDIFF ჩაშენებული ფუნქცია, რომელიც ითვლის ორ თარიღს შორის პერიოდთა


სხვაობას. მას აქვს შემდეგი სინტაქსი: DATEDIFF (< პერიოდი>,< საწყისი თარიღი, < ბოლო თარიღი>).

შეასრულეთ ‘‘სტუდენტების წარმოდგენა ასაკის მიხედვით‘‘ მოთხოვნის კოდი და შემდეგ დახურეთ


ფანჯარა, როგორც ეს ზემოთ იყო აღწერილი. ამ მოთხოვნის მუშაობის შესამოწმებლად შექმენით ახალი
მოთხოვნა, რომელშიც შეიტანეთ EXEC [studentebis asaki] 26 ბრძანება და შეასრულეთ იგი. შედეგად
მიიღებთ 7.11 სურათზე წარმოდგენილ სურათს.

სურ.7.11. სტუდენტების სია ასაკის მიხედვით

ე) Transact_SQL საშუალებით შექმენით შენახული პროცედურა, რომელიც გამოიტანს


კომპიუტერის სახელს, რომელზეც სრულდება ბრძანება (კოდი). თუ კომპიუტერის სახელი ცხრა
სიმბოლოზე მეტია, მაშინ გამოიტანოს პირველი ექვსი სიმბოლო. ამისათვის ახალი ცარიელი
მოთხოვნის არეში შეიტანეთ შემდეგი კოდი:

CREATE PROCEDURE Test AS


IF (DATALENGTH(HOST_NAME()) / 2 > 9)
SELECT LEFT(HOST_Name(), 6) + '...'
ELSE
SELECT HOST_Name()

შენიშვნა: შენახული პროცედურა შეიქმნება მიმდინარე მონაცემთა ბაზაში. კომპიუტერის


სახელის მისაღებად გამოყენებულია HOST_Name() ფუნქცია.

პროცედურის შექმნისათვის ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ !Execute


ღილაკზე. ფანჯრის ქვედა ნაწილში გამოჩნდება „Command(s) completed successfully.‘‘
შეტყობინება. დახურეთ კოდის შემცველი ფანჯარა.

120
ახალი შენახული პროცედურის გაშვებისათვის, რომლითაც შემოწმდება შექმნილი
შენახული პროცედურის მუშაობა, აუცილებელია ახალი ცარიელი მოთხოვნის შექმნა,
რისთვისაც ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ New Query ღილაკზე. წარმოდგენილ
ფანჯარაში ცარიელი მოთხოვნით შეიტანეთ კოდი – Test და ინსტრუმენტთა პანელზე მაუსი
დააწკაპუნეთ !Execute ღილაკზე.
ვ) Transact_SQL საშუალებით შექმენით შენახული პროცედურა, რომელიც მოქმედების
ნაცვლად ღებულობს რიცხვს და OUTPUT პარამეტრის საშუალებით მასში აბრუნებს ციფრთა
რაოდენობას. ამისათვის ახალი ცარიელი მოთხოვნის არეში შეიტანეთ შემდეგი კოდი:

CREATE PROCEDURE DigitCount


@num int,
@cnt int OUTPUT
AS
IF (@num = 0) SET @cnt = 1
ELSE BEGIN
SET @cnt = 0
WHILE (@num <> 0) BEGIN
SET @cnt = @cnt + 1
SET @num = @num / 10
END
END

პროცედურის შექმნისათვის ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ !Execute


ღილაკზე. ფანჯრის ქვედა ნაწილში გამოჩნდება „Command(s) completed successfully.‘‘
შეტყობინება. დახურეთ კოდის შემცველი ფანჯარა.
ახალი შენახული პროცედურის გაშვებისათვის, რომლითაც შემოწმდება შექმნილი
შენახული პროცედურის მუშაობა, აუცილებელია ახალი ცარიელი მოთხოვნის შექმნა,
რისთვისაც ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ New Query ღილაკზე. წარმოდგენილ
ფანჯარაში ცარიელი მოთხოვნით შეიტანეთ კოდი:

DECLARE @num int = 1249


DECLARE @cnt int
EXEC DigitCount @num, @cnt OUTPUT

121
SELECT @cnt

ამ კოდის შესრულებისათვის ინსტრუმენტთა პანელზე მაუსი დააწკაპუნეთ !Execute


ღილაკზე.

122
ლექცია №10

წარმოდგენები

შესავალი. წარმოდგენა (View) არის კიდევ ერთი ობიექტი, რომელიც შედის ნებისმიერი
მონაცემთა ბაზის ლოგიკური სტრუქტურის შემადგენლობაში. წარმოდგენა ბოლო
მომხმარებლისათვის ჩანს როგორც ცხრილი, მაგრამ ის არ შეიცავს მონაცემებს, მხოლოდ
წარმოადგენს მათ. ფიზიკურად წარმოდგენილი მონაცემები განაწილებულია მონაცემთა ბაზის
სხვადასხვა ცხრილებში.
წარმოდგენა რეალიზდება შენახული მოთხოვნის სახით, რომლის საფუძველზეც
მიმდინარეობს სხვადასხვა მონაცემთა ბაზის ცხრილებიდან მონაცემთა ამორჩევა.
წარმოდგენას გააჩნია შემდეგი უპირატესობები:
 უზრუნველყოს ინფორმაციის კონფედენციალურობას, ვინაიდან გამოაქვს მხოლოდ
აუცილებელი ინფორმაცია, ხოლო განსაზღვრულ ველებს მალავს;
 მონაცემთა წარმოდგენის სიმარტივე, ვინაიდან მომხმარებელი წარმოდგენასთან მუშაობს
როგორც ერთიან ცხრილთან, რომელიც შექმნილია რამდენიმე ცხრილიდან მონაცემთა
ამორჩევის საფუძველზე;
 მონაცემზე წვდომის წესების მართავა, მაგალითად, ცხრილის განსაზღვრული
ველებისათვის მოთხოვნის შესრულებაზე უფლების მიცემის ნაცვლად, ადვილია მოთხოვნის
შესრულება წარმოდგენით.
MS SQL Server წარმოგვიდგენს სხვადასხვა ხერხებს წარმოდგენების შექმნის: Transact_SQL
საშუალების დახმარებით და Managament studio ადმინისტრირების უტილიტით.

8.1. Transact_SQL საშუალებით წარმოდგენის შექმნა

წარმოდგენის შექმნისათვის გამოიყენება CREATE VIEW ბრძანება, რომლის შესრულების


უფლება აქვს sysadmin, db_owner, db_dlladmin როლის წევრებს:

CREATE VIEW წარმოდგენის_სახელი [(ველი [,...n])]


[WITH ENCRYPTION]
AS
მოთხოვნა_ამორჩევა

123
წარმოდგენის_სახელის მითითებით აუცილებელია შეინარჩუნოთ ადრე განსაზღვრული
წესები ობიექტების დასათაურების, ასევე ეს სახელი არ უნდა ემთხვეოდეს მონაცემთა ბაზაში
ადრე არსებულ ცხრილის სახელს. WITH ENCRYPTION პარამეტრი განსაზღვრავს მოთხოვნის
კოდის დაშიფრვას და გენერირდება ისე, რომ მომხმარებელს არ შეუძლია მისი ნახვა და
გამოყენება.
მოთხოვნა_ამორჩევა წარმოადგენს თავად SELECT ოპერატორს, რომლის პარამეტრიც
განსაზღვრავს წარმოდგენის შინაარსს. წარმოდგენის ველის სახელები მოიცემა ან ამორჩევის
ოპერატორში ფსევდონიმის დახმარებით ან მიეთითება ველი პარამეტრში.
მაგალითად, შექმენით წარმოდგენა, რომელიც studentebi ცხრილიდან იქნება ისეთი
ინფორმაციები (ველები), როგორიცაა: სახელი, გვარი და კურსი.

ა) CREATE VIEW ST_1 AS


SELECT saxeli, gvari, kursi
FROM [students].[dbo].[studentebi]

ან
ბ) CREATE VIEW ST_2 ([studentis saxeli], [studentis gvari], [kursi]) AS
SELECT saxeli, gvari, kursi
FROM [students].[dbo].[studentebi]

ST_1 (ან ST_2) წარმოდგენის შემცველობის ნახვისათვის შეასრულეთ შემდეგი მოთხოვნა:

გ) SELECT * FROM ST_1

მოცემული წარმოდგენის დახმარებით თავდაპირველი studentebi ცხრილის სხვა ველებზე


წვდომა შეზღუდულია. ამ შემთხვევაში ამბობენ, რომ ცხრილზე დადებულია ვერტიკალური
ფილტრი, ანუ სვეტების დონეზე, დაცვის გარეშე, შეზღუდულია ცხრილის ნაწილზე წვდომა.
თუ ამორჩევის კოდში განსაზღვრულია ჩანაწერთა ამორჩევის პირობა, მაშინ ამბობენ, რომ
ცხრილზე დადებული ჰორიზონტალური ფილტრი. მაგალითად, შემდეგი წარმოდგენა
უზრუნველყოფს იმ სტუდენტების ინფორმაციაზე წვდომას, რომლებიც სწავლობენ მეორე
კურსზე:

დ) CREATE VIEW ST_3 AS


SELECT saxeli, gvari, kursi
FROM [students].[dbo].[studentebi]

124
WHERE kursi=2

ST_2წარმოდგენის შემცველობის ნახვისათვის შეასრულეთ შემდეგი მოთხოვნა:

ე) SELECT * FROM ST_3

ამორჩევის მოთხოვნმაში შეიძლება მითითებული იყოს ნებისმიერი სირთულის SELECT


ბრძანება, მაგრამ ამ შემთხვევაში იკრძალება ORDER BY განყოფილების გამოყენება, რომელიც
შექმნილი წარმოდგენიდან შემდგომში შეიძლება გამოიყენოთ მონაცემთა ამორჩევისათვის.
აგრეთვე რეკომენდირებულია წარმოდგენის შექმნა მხოლოდ ცხრილის საფუძველზე,
რომლისთვისაც შესრულებულია შიგა შეერთება.
შეგახსენებთ, რომ წარმოდგენის გამოყენება არ განაპირობებს მწარმოებულობას.
წარმოდგენაზე მიმართვა იძახებს მისი შიგა კოდის შესრულებას, მაშასადამე, კარგ შემთხვევაში
არ ამცირებს მონაცემთა ბაზის მწარმოებულობას.

8.2. წარმოდგენის მართვა

წარმოდგენის შექმნა შეიძლება შეცვლით ALTER VIEW ბრძანების შესრულებით. ამ


ბრძანებას აქვს იგივე სინტაქსი რაც CREATE VIEW ბრძანებას.
მაგალითად:

ა) ALTER VIEW ST_2 ([st_saxeli], [st_gvari], [kursi]) AS


SELECT saxeli, gvari, kursi
FROM [students].[dbo].[studentebi]

წარმოდგენის წაშლისათვის აუცილებელია შემდეგი ბრძანების შესრულება:

DROP VIEW წარმოდგენის_სახელი

მაგალითად:

ბ) DROP VIEW ST_3

წარმოდგენის შესახებ ინფორმაციის მიღებისათვის გამოიყენება პროცედურა: sp_help


წარმოდგენის_სახელი, რომელიც გიჩვენებთ წარმოდგენის ველების სიას მისი თვისებების
აღწერით. კოდის გამოჩენისათვის, რომლის დახმარებითაც წარმოდგენა შეიქმნა, შეიძლება
გამოიყენოთ შენახული პროცედურა: sp_helptext წარმოდგენის_სახელი.
125
ობიექტთა სია, რომელზეც დამოკიდებულია წარმოდგენა, შეიძლება მიღებული იყოს
შემდეგი შენახული პროცედურის შესრულებით: sp_depends წარმოდგენის_სახელი.

126
ლექცია №11

მომხმარებლის ფუნქციები

შესავალი. მომხმარებლის ფუნქციები ძალიან ჰგავს შენახულ პროცედურას. რა თქმა უნდა


მასში შეიძლება პარამეტრის გადაცემა და ისინი შეასრულებენ გარკვეულ მოქმედებებს, მაგრამ
მათი მთავარი განსხვავება შენახული პროცედურისაგან არის ის, რომ მათ გამოაქვთ რაღაც
შედეგი. უფრო მეტიც მათი გამოძახება შეიძლება ჩაშენებული ფუნქციების ანალოგიურად,
მხოლოდ SELECT ოპერატორის დახმარებით.
ყველა მომხმარებლის ფუნქცია იყოფა ორ ჯგუფად:
1. სკალარული ფუნქციები - ფუნქცია, რომელიც აბრუნებს რიცხვს ან ტექსტს, ანუ ერთ
ან რამდენიმე მნიშვნელობას;
2. ცხრილური ფუნქციები - ფუნქცია, რომელიც ცხრილის სახით გამოიტანს შედეგს.

9.1. Transact_SQL საშუალებით მომხმარებლის ფუნქციის შექმნა

Transact_SQL საშუალებით ახალი მომხმარებლის ფუნქციის შექმნისათვის გამოიყენება


CREATE FUNCTION ბრძანება, რომელსაც აქვს შემდეგი სახე:

CREATE FUNCTION<ფუნქციის სახელი>


([@<პარამეტრი 1><ტიპი 1> [= მნიშვნელობა 1>],
@<პარამეტრი2><ტიპი2>[=< მნიშვნელობა 2>]....])
RETURNS <ტიპი>/TABLE
AS
RETURN ([<SQL ბრძანება])

პარამეტრების აღწერა:
 ფუნქციის სახელი - შესაქმნელი მომხმარებლის ფუნქციის სახელი;
 პარამეტრი1, პარამეტრი 2, .... - ფუნქციაზე გადაცემული პარამეტრები;
 მნიშვნელობა 1, მნიშვნელობა 2, .... - გულისხმობით პარამეტრების მნიშვნელობა;
 ტიპი 1, ტიპი 2, .... - პარამეტრების მონაცემთა ტიპები.

127
RETURN საკვანძო სიტყვის შემდეგ სკალურ ფუნქციაში შეიტანება შედეგის მონაცემთა
ტიპი, რომელიც აბრუნებს სკალურ ფუნქციას, ან შეიტანება ცხრილ ფუნქციაში საკვანძო სიტყვა
TABLE.
RETURN საკვანძო სიტყვის შემდეგ შეიტანება თვით ფუნქციის SQL ბრძანება.

შენიშვნა: RETURN საკვანძო სიტყვის შემდეგ შეიძლება იყოს რამდენიმე ბრძანება,


რომლებიც მოთავსებული იქნება BEGIN და END სიტყვებს შორის. ამ შემთხვევაში RETURN
საკვანძო სიტყვა არ ისმება. პარამეტრის მონაცემთა ტიპი უნდა ემთხვეოდეს გამოსახულების
მონაცემთა ტიპს, რომელშიც ის გამოიყენება. თუ გამოიყენება SQL-ის რამდენიმე ბრძანება და
BEGIN და END, მაშინ END-ის წინ უნდა ჩაისვას RETURN< ფუნქციის შედეგი > ბრძანება.

მაგალითები:
ა) სამი რიცხვის საშუალოს გამოთვლის ფუნქცია (სკალარული მომხმარებლის ფუნქცია):

CREATE FUNCTION sashualo


(@X1 Int, @X2 Int, @X3 Int)
RETURNS Real
AS
BEGIN
DECLARE @Res Real
SET @Res=(@X1+@x2+@x3)/3
RETURN @Res
END

შენიშვნა: DECLARE ბრძანება ქმნის Res ცვლადს მნიშვნელობათა შესანახად (Real მონაცემთა
ტიპი).

შექმნილი ფუნქციის გამოყენებისათვის ახალი მოთხოვნის ფანჯარაში შეიტანეთ შემდეგი


კოდი:
SELECT dbo.sashualo (8, 4, 6)

შედეგი იქნება 6-ის ტოლი.

ბ) studentebi ცხრილიდან გამოიტანეთ saxeli, gvari, dabadebis_tarigi და ასაკის სვეტი


(ცხრილური მომხმარებლის ფუნქცია), რომელიც გამოითვლის დაბადების თარიღსა და
მიმდინარე თარიღს შორის სხვაობას წლებში (CurDate პარამეტრი):
128
CREATE FUNCTION Asaki
(@CurDate Date)
RETURNS TABLE
AS
RETURN (SELECT saxeli, gvari, [dabadebis_tarigi],
Asaki=DATEDIFF (yy, [dabadebis_tarigi], @ CurDate)
FROM [students].dbo.studentebi)

შექმნილი ფუნქციის გამოყენებისათვის ახალი მოთხოვნის ფანჯარაში შეიტანეთ შემდეგი


კოდი:

SELECT * FROM dbo.Asaki ('10/19 /2012')

შედეგად მიიღება სტუდენტების სია, მათ ასაკთან ერთდ 2012 წლის 19 ოქტომბრის
მდგომარეობით.

9.2. Managament studio უტილიტის საშუალებით მომხმარებლის ფუნქციის შექმნა

Microsoft SQL Server 2008-ში მომხმარებლის ყველა ფუნქცია არის functions ფოლდერში,
რომელიც თავის მხრივ არის ობიექტთა მიმომხილველის programmability ფოლდერში (სურ. 9.1).

სურ. 9.1. ობიექტთა მიმომხილველი

129
ახალ სკალურ მომხმარებლის ფუნქციის შექმნისათვის შეასრულეთ functions ფოლდერის
კონტექსტური მენიუს New/Scalar–valued function... ბრძანება. ეკრანზე გამოვა ახალი სკალარული
მომხმარებლის ფუნქცია (სურ. 9.2).

სურ.9.2. სკალარული მომხმარებლის ფუნქციის შექმნის ფანჯარა

სკალარული მომხმარებლის ფუნქციის სინტაქსი მსგავსია შენახული პროცედურის


სინტაქსისა, მაგრამ არის რამდენიმე ძირეული განსხვავება (სურ. 9.2):
1. ფუნქციის სახელის განსაზღვრის არე (Scalar_Function_Name);
2. პროცედურისათვის გადასაცემი პარამეტრები (@param1). პარამეტრის განსაზღვრა
ანალოგიურია შენახული პროცედურის პარამეტრების განსაზღვრისა;
3. პროცედურის მიერ დაბრუნებული მნიშვნელობების მონაცემთა ტიპი;
4. ცვლადების გამოცხადების არე, რომელიც გამოიყენება ფუნქციის შიგნით. ცვლადის
გამოცხადებას აქვს შემდეგი სინტაქსი:
DECLARE @ <ცვლადის სახელი><მონაცემთა ტიპი>
5. თვით მომხმარებლის ფუნქციის ტანი, რომელიც შეიცავს T_SQL ენის ბრძანებებს;
6. RETURN ბრძანება ფუნქციის შესრულების შედეგის დამაბრუნებელია. მას აქვს შემდეგი
სინტაქსი:

130
RETURN @ <ცვლადის სახელი შედეგით>
ცვლადს უნდა ჰქონდეს იგივე ტიპი, რაც მითითებულია მესამე პუნქტში.
მაგალითები:
ა) შექმენით სკალარული მომხმარებლის ფუნქცია, რომელიც გამოითვლის სამი რიცხვის
საშუალოს. ამისათვის ახალი მომხმარებლის ფუნქციის ფანჯარაში შეიტანეთ კოდი, ისე როგორც
ეს სურ.9.3–ზე არის ნაჩვენები.
1

სურ.9.3. სკალარული მომხმარებლის ფუნქციის – „სამი რიცხვის საშუალოს― შექმნის ფანჯარა

მოცემული სკალარული მომხმარებლის ფუნქციის კოდი დაწვრილებით ასე აღიწერება


(სურ.9.3):
1. CREATE FUNCTION [funqcia sami ricxvis sashualo] - შესაქმნელი ფუნქციის სახელი
„ფუნქცია სამი რიცხვის საშუალო―;
2.@Value1 int, @Value2 int, @Value3 int - განსაზღვრავს Value1, Value2, და Value3
პროცედურის სამ პარამეტრს. მოცემულ პარამეტრებს შეიძლება მიანიჭოთ მთელი რიცხვი (int
მონაცემთა ტიპი);
3. RETURNS Real - გიჩვენებთ, რომ ფუნქცია აბრუნებს წილადურ რიცხვს (Real მონაცემთა
ტიპი);
4. DECLARE @Result Real – გამოცხადდება @Result ცვლადი, ფუნქციის მუშაობის შედეგის
შენახვისათვის, ანუ წილადი რიცხვი (Real მონაცემთა ტიპი);
5.SELECT @Result=(@Value1+@Value2+@Value)/3 – ითვლის საშუალოს და შედეგს ათავსებს
@Result ცვლადში;
6. RETURN @Result - უბრუნებს მნიშვნელობას @Result ცვლადს.
კოდის დანარჩენი ფრაგმენტები აღწერილი იყო ზევით (სურ.9.2).

131
ფუნქციის შექმნისათვის, ანუ ზემოთ აღწერილი კოდის შესრულებისათვის, ინსტრუმენტთა
პანელზე მაუსი დააწკაპუნებთ !Execute ღილაკზე. ფანჯრის ქვედა ნაწილში გამოჩნდება command
(s) completed successtully შეტყობინება. დახურეთ ფანჯარა.
სკალარული მომხმარებლის ფუნქციის შესამოწმებლად აუცილებელია ახალი ცარიელი
მოთხოვნა შექმნათ. ამ მოთხოვნაში შეიტანეთ SELECT dbo.[funqcia sami ricxvis sashualo](3, 5, 4)
ბრძანება და შეასრულეთ მოთხოვნა. ფანჯრის ქვედა ნაწილში მიიღებთ სკალური მომხმარებლის
ფუნქციის შედეგს: 4 (სურ.9.4).

9.4. სკალარული მომხმარებლის ფუნქციის – სამი რიცხვის საშუალოს გამოთვლის შედეგი

ბ) განსაზღვრეთ შეტანილი თარიღისათვის თვის ბოლო რიცხვი (რთული სკალარული


მომხმარებლის ფუნქციის შექმნა). ამისათვის შეიტანეთ ახალი მომხმარებლის ფუნქციის კოდი
(სურ.9.5):

132
სურ.9.5. სკალარული მომხმარებლის ფუნქციის – „თვის ბოლო დღის― შექმნის ფანჯარა

მოცემული კოდი შედგება შემდეგიპუნქტებისაგან:


1. CREATE FUNCION [tvis bolo dge] - განსაზღვრავს შესაქმნელი ფუნქციის სახელს,
როგორც „თვის ბოლო რიცხვი―;
2. @MyDate - განსაზღვრავს MyDate პროცედურის პარამეტრს. პარამეტრს შეიძლება
მიანიჭოთ თარიღის, ან დროის მნიშვნელობა (DateTime მონაცემთა ტიპი);
3. RETURNS DateTame - გიჩვენებთ, რომ ფუნქცია აბრუნებს თარიღის ან დროს
(DateTime მონაცემთა ტიპი);
4. DECLARE @Year Int, DECLARE @Month Int, DECLARE @Day Int - გამოცხადდება
@Year, @Month და @Day ცვლადები. შეტანილი თარიღის წლის, თვის და დღის მთელი
რიცხვითი მნიშვნელობების შენახვისათვის (Int მონაცემთა ტიპი).
თარიღის მნიშვნელობის დროებითი (შუალედური) შენახვისათვის DECLARE @TmpDate
VarChar(10)–თვის გამოცხადდება TmpDate ცვლადი, რომლის სტრიქონის სიგრძე 10 სიმბოლოა
(VarChar (10) მონაცემთა ტიპი).

133
DECLARE @Result DateTime შედეგის შენახვისათვის აცხადებს Result ცვლადს - თვის ბოლო
დღის თარიღი (DateTime მონაცემთა ტიპი);
5. SET @Year=DatePart (yy, MyDate), SET@Month =DatePart(mm, MyDate), SET
@Day=DatePart (dd, MyDate) - განისაზღვრება შეტანილი თარიღის ნაწილი და შეიტანება @Year,
@Month და @Day ცვლადები. თარიღის ნაწილის განსაზღვრისათვის გამოიყენება DatePart
ფუნქცია, რომელსაც აქვს შემდეგი სინტაქსი: DatePart (<თარიღის ნაწილი>, <თარიღი>). აქ
„თარიღის ნაწილი― არის სპეციალურად კოდირებული სიმბოლოები, რომლებითაც
განისაზღვრება თარიღის ნაწილი (yy - წელი, mm – თვე, dd – დღე), „თარიღი―– არის თარიღი,
რომლის ნაწილებიც განისაზღვრება.
6. IF@Month =12
BEGIN
SET@Month =1
SET@Year=@Year +1
END
ELSE
BEGIN
SET@Month = @Month +1
END

ზემოთ აღნიშნული კოდი ასრულებს შემდეგ მოქმედებას: თუ თვის ნომერი ტოლია 12-ის,
მაშინ დააყენოს თვის ნომრად (@Month) ერთის ტოლად და გაზარდოს წელი (@ Year) ერთით,
თუ არადა გაზარდოს თვე ერთით.
7. SET @TmpDate = Convert (Varchar, @Month) +'/01/' + Convert(Varchar, @ Year), SET
@Result=Convert(DateTime, @TmpDate) - თარიღის რიცხვითი მნიშვნელობა გადაყავს
სტრიქონულ ფორმატში და ჩაიწერება ის @TmpDate ცვლადში. შემდეგ თარიღი გადაყავს
სტრიქონულ ფორმატში. თარიღისა და დროის მონაცემთა ტიპი შეიტანება @Result ცვლადში.
კონვერტაციისათვის გამოიყენება Convert ფუნქცია, რომელსაც აქვს შემდეგი სინტაქსი:
Convert(<მონაცემთა ტიპი>, <მნიშვნელობა>), აქ „მონაცემთა ტიპი― არის ის მონაცემთა ტიპი,
რომელშიც გადაიყვანება „მნიშვნელობა―;
8. SET @Result=DateAdd(dd, -1, @Reuslt) - თარიღიდან, რომელიც ინახება @Reuslt
ცვლადში, გამოაკლდება ერთი დღე. ამისათვის გამოიყენება DateAdd ფუნქცია (იხ. DatePart
ფუნქცია);

134
9. RETURN @Result - აბრუნებს მნიშვნელობას, რომელიც ინახება @Result ცვლადში.
ფუნქციის შექმნისათვის, ზემოთ აღწერილი კოდის შესრულებისათვის, მაუსი დააწკაპუნეთ
!Execute ღილაკზე. ეკრანზე გამოვა Command (s) completed successfully შეტყობინება. დახურეთ
ფანჯარა.
[tvis bolo dge] ფუნქციის მუშაობის შემოწმებისათვის შექმენით ახალი მოთხოვნა და მასში
შეიტანეთ SELECT dbo.[tvis bolo dge] ('05/17/2012') ბრძანება და მაუსი დააწკაპუნეთ !Execute
ღილაკზე (სურ.9.6). ეკრანზე გამოჩნდება ახალი სკალარული მომხმარებლის ფუნქციის შედეგი:
2012-05-31.

სურ.9.6. სკალარული მომხმარებლის ფუნქციის – „თვის ბოლო დღის― შედეგი

გ) ცხრილური მომხმარებლის ფუნქციის შექმნისათვის თქვენი მონაცემთა ბაზის


programmability ფოლდერის Functions ქვეფოლდერის კონტექსტური მენიუს New/Inline Table-
valued Function ბრძანება. ეკრანზე გამოვა ახალი ცხრილური მომხმარებლის ფუნქცია (სურ.9.7).

სურ.9.7. ცხრილური მომხმარებლის ფუნქციის შექმნის ფანჯარა

ცხრილური მომხმარებლის ფუნქცია შედგება შემდეგი პუნქტებისაგან:


1. ფუნქციის სახელის განსაზღვრის არე (Scalar_Function_Name):
2. პარამეტრები, რომლებიც გადაეცემა პროცედურას (@param1, @param2);
135
3. RETURNS TABLE გიჩვენებთ, რომ ფუნქცია წარმოადგენს ცხრილურს, ანუ აბრუნებს
ცხრილს;
4. თვით მომხმარებლის ფუნქციის ტანი, რომელიც შედგება T-SQL კოდის
ბრძანებებისაგან.
ცხრილური მომხმარებლის ფუნქციის დანარჩენი პუნქტები იგივეა, რაც სკალარული
მომხმარებლის ფუნქციის შემთხვევაში იყო.
მაგალითისათვის შექმენით ცხრილური მომხმარებლის ფუნქცია „ასაკით ამორჩევის
ფუნქცია―, რომელიც გამოითვლის სტუდენტების ასაკს. ახალი მომხმარებლის ფუნქციის
ფანჯარაში შეიტანეთ სურ.9.7-ზე წარმოდგენილი კოდი:

სურ.9.7. ცხრილური მომხმარებლის ფუნქციის – „ასაკით ამორჩევის ფუნქცია―

მოცემული სურ.9.7–დან ჩანს, რომ მოცემულცხრილურ ფუნქციას არ აქვს პარამეტრები და


იგი რეალიზებულია ბრძანებით.

SELECT saxeli, gvari, [dabadebis tarigi], asaki=DateDiff(yy, [dabadebis tarigi], GetDate())


FROMstudents.dbo.studentebi

ზემოთ წარმოდგენილი ბრძანებიდან ჩანს, რომ studentebi ცხრილიდან გამოიტანება saxeli,


gvari და dabadebis tarigi; აგრეთვე გამოითვლება „asaki― ველი. „asaki― ველი გამოითვლება
ჩაშენებული DateDiff ფუნქციის საშუალებით, რომელიც ითვლის თარიღთა შორის სხვაობას
განსაზღვრულს გაზომვის ერთეულებში. ამ მაგალითში საწყის თარიღად აიღება სტუდენტის
დაბადების თარიღი, ხოლო თარიღის ბოლოდ აიღება მიმდინარე თარიღი (GetDatel() ფუნქცია).
ფუნქციის შექმნა (ზემოთ აღწერილი კოდის) შესრულება, ისეთივე წესებით ხდება, როგორც
ეს ზემოთ იყო აღწერილი. ანუ მაუსი დააწკაპუნეთ !Execute ღილაკზე. ეკრანზე გამოვა Command
(s) completed successfully შეტყობინება. დახურეთ ფანჯარა.

136
ახალი ცხრილური მომხმარებლის ფუნქციის მუშაობის შემოწმებისათვის შექმენით ახალი

მოთხოვნა და მასში შეიტანეთ შემდეგი ბრძანება SELECT * FROM dbo.[asakit amorchevis funqcia] ()

და მაუსი დააწკაპუნეთ !Exicute ღილაკზე. ეკრანის ქვედა ნაწილში გამოვა სტუდენტების სახელი,
გვარი და დაბადების თარიღი და ასაკი (სურ.9.8).

სურ.9.8. ცხრილური მომხმარებლის ფუნქციის – „ასაკით ამორჩევის ფუქცია― შედეგი

შენიშვნა: ყურადღება გაამახვილეთ იმ ფაქტზე, რომ თქვენ მუშაობთ ცხრილურ


ფუნქციასთან, როგორც ჩვეულებრივ ცხრილთან.

137
ლექცია №12

დიაგრამები

Microsoft SQL Server 2008-ში ყველა დიაგრამა ინახება Database Diagrams ფოლდერში
(სურ.10.1).

სურ.10.1. ობიექტთა მიმომხილველი

შექმენით დიაგრამა, რომელიც უზრუნველყოფს თქვენი მონაცემთა ბაზის (მაგალითად,


students) მთლიანობას. ამისათვის Database Diagrams ფოლდერის კონტექსტურ მენიუში
შეასრულეთ New Database Diagrams ბრძანება (სურ.10.1). თავდაპირველად გამოვა ფანჯარა,
რომელშიც ახალი დიაგრამის დამატების შესახებ იქნება შეკითხვა. ამ ფანჯარაში მაუსი
დააწკაპუნეთ Yes ღილაკზე. შემდეგ გამოვა Add Table ფანჯარა, რომელიც განკუთვნილია ახალი
დიაგრამისათვის ცხრილის დამატებისათვის (სურ.10.2).

სურ.10.2. ახალი დიაგრამის შექმნის ფანჯარა

ცხრილების დამატების ფანჯარაში მონიშნეთ თქვენი მონაცემთა ბაზის ყველა ცხრილი და


მაუსი დააწკაპუნეთ Add ღილაკზე (სურ.60). შემდეგ დახურეთ Add Table ფანჯარა.
ეკრანზე გამოვა დიაგრამის ფანჯარა, სადაც მოჩანს არჩეული ცხრილები. ახლა
აუცილებელია განსაზღვროთ ცხრილებს შორის კავშირები. Shefaseba ცხრილიდან kodi ველი

138
გადაიტანეთ students ცხრილის kodi ველზე. ეკრანზე გამოჩნდება ცხრილებს შორის კავშირის
შექმნის Tables and Columus ფანჯარა (სურ.10.3).

სურ.10.3. ახალი დიაგრამის შექმნის ფანჯარა

კავშირის შექმნის ფანჯარაში მაუსი დააწკაპუნეთ OK ღილაკზე (სურ.10.3). ეკრანზე


გამოჩნდება Foreign Key Relationship კავშირის თვისებების გაწყობის ფანჯარა (სურ.10.4).

სურ.10.4. ახალი დიაგრამის შექმნის თვისებების ფანჯარა

დატოვეთ ეს თვისებები უცვლელად და მოცემულ ფანჯარაში მაუსი დააწკაპუნეთ OK


ღილაკზე. დიაგრამაში გამოჩნდება Students და Shefaseba ცხრილებს შორის კავშირი სპეციალური
ხაზის სახით (სურ.10.5).

139
სურ.10.5. ცხრილებს შორის კავშირი

შენიშვნა: ანალოგიური წესით შეგიძლიათ მონაცემთა ბაზის ნებისმიერი ცხრილების


ველებს შორის კავშირის გაკეთება.

დახურეთ დიაგრამის შექმნის ფანჯარა. ეკრანზე გამოვა დიაგრამის შენახვის შესახებ


კითხვა. აქ აუცილებელია მაუსი დააწკაპუნოთ Yes ღილაკზე (სურ.10.6).

სურ.10.6. დიაგრამის შენახვის ფანჯარა

ეკრანზე გამოვა ახალი დიაგრამისათვის სახელის მინიჭების Choose Name სარკმელი.

სურ.10.7. დიაგრამისათვის სახელის დარქმევის ფანჯარა

შეიტანეთ დიაგრამის ახალი სახელი და მაუსი დააწკაპუნეთ OK ღილაკზე (სურ.10.7).

140
სურ.10.8. დიაგრამის შენახვის ფანჯარა

ეკრანზე გამოვა Save ფანჯარა. აქ მაუსი დააწკაპუნეთ Yes ღილაკზე (სურ.10.8).

141
ლექცია №13

მონაცემების მართვა

SQL Server–ის ცხრილებში, მონაცემების შეტანის (ჩასმის), მათი შეცვლის (განახლების) და


წაშლის ოპერაციებისათვის გამოიყენება INSERT, UPDATE და DELETE ბრძანებები.
INSERT ბრძანებით ხორციელდება ცხრილში ახალი სტრიქონის ჩასმა (დამატება).
უმარტივეს შემთხვევაში მას აქვს შემდეგი სახე:

INSERT INTO <ცხრილის_სახელი>[(<ველების_სია>)]


VALUES (<ველის_მნიშვნელობა>, <ველის_მნიშვნელობა>, … )

პარამეტრების აღწერა:
ცხრილის_სახელი – ცხრილი, რომელშიც შეგყავთ მონაცემები:
ველების_სია – ველების სია, სადაც შეგყავ მონაცემები, თუ არაა მითითებული, მაშინ
იგულისხმება ყველა ველის შევსება, ველების სია–ში ველები ერთმანეთისაგან გამოყოფილია
მძიმით;
ველის_მნიშვნელობა – ველების მნიშვნელობები მძიმის შემდეგ.
მნიშვნელობის ნაცვლად შეიძლება მიუთითოთ Default კონსტანტა, ანუ შეიტანება
მნიშვნელობა გულისხმობით, ან შეიძლება SELECT ოპერატორით ჩანაცვლება.

საკვანძო სიტყვა VALUES შემდეგ ფრჩხილებში მითითებული ჩანაწერით ცხრილში


შეიტანება ახალი სტრიქონის მნიშვნელობა იმ თანმიმდევრობით, როგორც ეს ცხრილის
თავდაპირველი შექმნისას იყო.
მაგალითები:

ა) დაამატეთ studentebi ცხრილს ახალი სტრიქონი შემდეგი მონაცემებით: 61013245674,


ლომიძე, ერეკლე, ...

შენიშვნა: სამი (...) წერტილი აღნიშნავს დანარჩენი ველების მნიშვნელობებს.

INSERT INTO [students].dbo.studentebi


VALUES (61013245674, N'ლომიძე', N'ერეკლე', ...)

142
ასეთი ბრძანება შეიძლება შესრულდეს იმ შემთხვევაში, თუ ცხრილში გამოყენებული
ველის სახელები (studentebi) შექმნილია CREATE TABLE (ცხრილის შექმნა) ბრძანებით.

ბ) დაამატეთ studentebi ცხრილს ახალი სტრიქონი, რომელიც შეიცავს NULL–მნიშვნელობას


(ამ შემთხვევაში ის შეიტანება, როგორც ჩვეულებრივი მნიშვნელობა):

INSERT INTO [students].dbo.studentebi


VALUES (61083245679, N'გვარამია', NULL, ...)

გ) დაამატეთ studentebi ცხრილს ახალი სტრიქონი, როცა აუცილებელია ველის


მნიშვნელობის შეტანა გარკვეული თანმიმდევრობით, ანუ როცა არაა საჭირო მნიშვნელობების
შეტანა ყველა სვეტში (ამ შემთხვევაში გამოიყენება შემდეგი ბრძანების ფორმა):

INSERT INTO [students].dbo.studentebi (kodi, saxeli, gvari)


VALUES (610832453679, N'დურმიშხან', N'ქათამაძე')

შენიშვნა: სვეტებს, რომელთა დასახელება არაა მითითებული ფრჩხილებში წარმოდგენილ


სიაში (kodi, saxeli, gvari), ავტომატურად ენიჭება მნიშვნელობა გულისხმობის პრინციპით.

დ) დაამატეთ studentebi2 ცხრილს სტრიქონები INSERT ბრძანების საშუალებით ანუ ერთი


ცხრილიდან მონაცემები ამოიღებთ და მეორეში ჩასვით:

INSERT INTO [students].dbo.studentebi2


SELECT *
FROM [students].dbo.studentebi
WHERE kursi =2

სადაც studentebi2 ცხრილი უნდა იყოს შექმნილი CREATE TABLE ბრძანებით და უნდა
ჰქონდეს იდენტური სტრუქტურა studentebi ცხრილის შესაბამისად.
ცხრილიდან სტრიქონის წასაშლელად გამოიყენება DELETE ბრძანება. უმარტივეს
შემთხვევაში მას აქვს შემდეგი სახე:

DELETE FROM <ცხრილის_სახელი>


[WHERE<პირობა>]

პარამეტრების აღწერა:
ცხრილის_სახელი – წასაშლელი ცხრილის სახელი;

143
პირობა – პირობა, რომელსაც აკმაყოფილებს წასაშლელი ჩანაწერი, თუ პირობა არაა
მითითებული, მაშინ წაიშლება ცხრილის ყველა სვეტი. თუ პირობა მითითებულია, მაშინ
წაიშლება იმ ველის ჩანაწერები, რომელსაც შეესაბამება პირობა.

ე) წაშალეთ studentebi2 ცხრილში ყველა სტრიქონი:

DELETE FROM [students].dbo.studentebi2

შედეგად ცხრილი იქნება ცარიელი (რომლის წაშლაც შეიძლება DROP TABLE ბრძანებით).

ვ) წაშალეთ studentebi ცხრილში 610832453679 პირადი ნომრის მქონე სტუდენტის


მონაცემები (სტრიქონი):

DELETE FROM [students].dbo.studentebi


WHERE kodi = 610832453679

ზ) წაშალეთ studentebi ცხრილში სტრიქონთა ჯგუფი (მაგალითად, მაგისტრატურის ყველა


სტუდენტი):

DELETE FROM [students].dbo.studentebi


WHERE safexuri =N'მაგისტრატურა'

UPDATE ბრძანება საშუალებას იძლევა შეცვალოთ, ანუ განაახლოთ ცხრილის არსებულ


სტრიქონში ან სვეტში რამდენიმე ან ყველა ველის მნიშვნელობა. უმარტივეს შემთხვევაში მას
აქვს შემდეგი სახე:

UPDATE <ცხრილის_სახელი>
SET
<ველის_სახელი1>= <გამოსახულება1>,
<ველის_სახელი2>= <გამოსახულება>,

[WHERE<პირობა>]

პარამეტრების აღწერა:
ველის_სახელი1, ველის_სახელი2 – შესაცვლელი ველის სახელები;
გამოსახულება1, გამოსახულება2 – კონრეტული მნიშვნელობა ან NULL, ან SELECT
ოპერატორი. აქ SELECT ოპერატორი გამოიყენება როგორც ფუნქცია;

144
პირობა – პირობა, რომელიც შეესაბამება ჩანაწერს, ველი რომელიც იცვლება.

თ) შეცვალეთ studentebi ცხრილში ყველა სტუდენტის სტიპენდია. კერძოდ, ყველა მათგანის


სტიპენდია 100 ლარის ტოლი იყოს:

UPDATE [students].dbo.studentebi
SET stipendia = 100

ი) შეცვალეთ studentebi ცხრილში ყველა მეორე კურსის სტუდენტის სტიპენდია 200 ლარით
(UPDATE ბრძანებაში შეიძლება გამოიყენოთ პრედიკატი მითითებული WHERE ფრაზაში):

UPDATE [students].dbo.studentebi
SET stipendia = 200
WHERE kursi = 2

კ) შეცვალეთ studentebi ცხრილში რამდენიმე ველის მნიშვნელობა (UPDATE ბრძანებით


შესაძლებელია შეიცვალოს არამარტო ერთი სვეტი, არამედ რამდენიმე). კონკრეტული სვეტების
მითითებისათვის, რომელთა მნიშვნელობები უნდა იყოს მოდიფიცირებული, გამოიყენება SET
ფრაზა. მოთხოვნას ექნება შემდეგი სახე:

UPDATE [students].dbo.studentebi
SET stipendia = 400, dabadebis_tarigi='12/08/1995'
WHERE kodi = 610832453679

ლ) შეცვალეთ studentebi ცხრილში stipendia ველის მნიშვნელობები. კერძოდ, სტიპენდია


გააორმაგეთ (ბრძანება UPDATE SET ფრაზაში შეიძლება გამოიყენოთ სკალარული გამოსახულება,
რომელიც მიუთითებს ველის მნიშვნელობის შეცვლის ხერხს, რომელიც შეიძლება შედიოდეს
შესაცვლელის მნიშვნელობა და სხვა ველები).

UPDATE [students].dbo.studentebi
SET stipendia = stipendia *2

შენიშვნა: INSERT ოპერატორის გამოყენება ქვემოთხოვნაში საშუალებას იძლევა ერთ


ცხრილში ჩატვირთოთ რამდენიმე სტრიქონი, სხვა ცხრილებიდან ინფორმაციის გამოყენებით.
მაშინ, როცა INSERT ოპერატორი VALUES გამოყენებით უმატებს მხოლოდ ერთ სტრიქონს.
ქვემოთხოვნა INSERT–ით ცხრილს დაუმატებს იმდენ სტრიქონს, რამდენსაც ქვემოთხოვნა

145
ამოიღებს სხვა ცხრილიდან. ამავე დროს სვეტთა რაოდენობა და ტიპი ორივე ცხრილში უნდა
იყოს ერთნაირი.

146
ლექცია №14

ტრიგერები

შესავალი: ტრიგერები (triggers) არის შენახული პროცედურის სპეციალური კლასი,


რომლებიც სერვერის მიერ ავტომატურად გაიშვება ცხრილებში მონაცემების დამატების,
შეცვლის ან წაშლის დროს. ისინი სამ ტიპად იყოფა:
1. შეცვლის ტრიგერები (UPDATE TRIGGER);
2. ჩამატების ტრიგერები (INSERT TRIGGER);
3. წაშლის ტრიგერები (DELETE TRIGGER).
ერთი ცხრილისთვის შეიძლება განსაზღვრული იყოს თითოეული ტიპის რამდენიმე
ტრიგერი. გარდა ამისა, ერთი ტრიგერიდან შეგიძლიათ სხვა ტრიგერები გამოიძახოთ. ასეთ
შემთხვევაში გაქვთ ჩადგმული ტრიგერები (nested triggers).
ტრიგერი გაიშვება ამა თუ იმ ცხრილზე მოქმედებების შესრულების დროს. ტრიგერები
სხვადასხვა დანიშნულებით გამოიყენება. მათი საშუალებით შესაძლებელია ბმულ ცხრილებში
კასკადური ცვლილებების შესრულება, მონაცემების შემოწმების რთული ალგორითმების
რეალიზება და ა.შ.
თითოეული ტრიგერი დაკავშირებულია კონკრეტულ ცხრილთან. მაგალითად, ცხრილში
მონაცემების შეცვლის წინ სერვერი ავტომატურად გაუშვებს ტრიგერს, და თუ მისი შესრულება
წარმატებით დამთავრდა, მაშინ შესრულდება ცხრილში მონაცემების ცვლილება. ტრიგერის მიერ
შესრულებული მოქმედებები განიხილება როგორც ერთი ტრანზაქცია. ტრიგერების გამოყენება
შეიძლება, აგრეთვე, თქვენი შეხედულების მიხედვით.
ამრიგად, ტრიგერი იქმნება კონკრეტული ცხრილისათვის და სრულდება ავტომატურად
თუ ცხრილში, რომლისთვისაც იგი შეიქმნა განხორციელდა მოვლენა (ჩანაწერთა დამატება,
განახლება ან წაშლა).
ტრიგერის შექმნის წინ საჭიროა გულდასმით გაიაზროთ ბრძანებების შესრულების
მიმდევრობა ტრიგერის კოდში. უნდა გახსოვდეთ, რომ ტრიგერები დიდი ხნით ბლოკავენ
საჭირო რესურსებს.
ტრიგერების შექმნა არ შეიძლება დროებითი ან სისტემური ცხრილებისათვის. მეორეს
მხრივ, ტრიგერს შეუძლია მიმართოს დროებით ცხრილს. თუ ტრიგერს სჭირდება სისტემურ
ცხრილთან მიმართვა, მაშინ უნდა გამოიყენოთ წარმოდგენები.

147
12.1. Transact_SQL საშუალებით ტრიგერის შექმნა

ტრიგერის შექმნისათვის აუცილებელია ახალი მოთხოვნის ჩანართში შეიტანოთ CREATE


TRIGGER ბრძანება, რომელსაც აქვს შემდეგი სინტაქსი:

CREATE TRIGGER<ტრიგერის სახელი>


ON<ცხრილის სახელი>
FOR<AFTER|INSTEAD OF><INSERT|UPDATE|DELETE>
[WITH ENCRYPTION]
AS<SQLბრძანებები>

პარამეტრების აღწერა:
ტრიგერის სახელი - ეს შესაქმნელი ტრიგერის სახელია;
ცხრილის სახელი - ცხრილის სახელი, რომლისთვისაც იქმნება ტრიგერი;
თუ გამოიყენება ALTER პარამეტრი, მაშინ ტრიგერი სრულდება მოვლენის (ცვლილების)
შემდეგ, თუ გამოიყენება INSTEAD OF პარამეტრი, მაშინ სრულდება ცვლილების ერთად;
INSERT, UPDATE და DELETE პარამეტრები განსაზღვრავენ მოვლენას (ცვლილებას),
რომლითაც სრულდება ტრიგერი;
WITH ENCRYPTION პარამეტრი - ის განკუთვნილია ტრიგერის შესრულებისას მონაცემთა
დაშიფრვის ჩართვისათვის;
SQL ბრძანებები - ეს SQL ბრძანებებია, რომელიც სრულდება ტრიგერის აქტივობის დროს.
პაკეტში CREATE TRIGGER ბრძანება უნდა იყოს პირველი და უნდა გამოიყენებოდეს
მხოლოდ ერთი ცხრილის მიმართ. ტრიგერები შეიძლება შეიქმნას მხოლოდ მიმდინარე
მონაცემთა ბაზაში, მაგრამ ტრიგერის შიგნით დასაშვებია სხვა მონაცემთა ბაზებთან მიმართვა,
მათ შორის დაშორებულ სერვერზე მოთავსებულ მონაცემთა ბაზასთან.
მაგალითები:

ა) შექმენით ტრიგერი Damateba, რომელიც studentebi ცხრილისათვის ახალი ჩანაწერის


დამატების შემთხვევაში ეკრანზე გამოიტანს შეტყობინობას ‖ჩანაწერი დამატებულია‖.

CREATE TRIGGER Damateba


ON dbo.studentebi
FOR INSERT
148
AS PRINT N'ჩანაწერი დამატებულია'

თუ studentebi ცხრილს გსურთ დაამატოთ ახალი სტუდენტის მონაცემი, ამისათვის


შექმენით ცარიელი მოთხოვნა და მასში შეიტანეთ შემდეგი ბრძანება:

INSERT INTO [students].dbo.studentebi (kodi, saxeli, gvari)


VALUES (610839993671, N'დავით', N'სამნიძე')

მოთხოვნის შესრულების შემდეგ ეკრანზე გამოვა შეტყობინება ჩანაწერის დამატების


შესახებ.

ბ) შექმენით ტრიგერი Ganaxleba, რომელიც studentebi ცხრილისათვის ჩანაწერის


განახლების შემთხვევაში ეკრანზე გამოიტანს შეტყობინობას ‖ჩანაწერი განახლებულია‖.

CREATE TRIGGER Ganaxleba


ON dbo.studentebi
FOR UPDATE
AS PRINT N'ჩანაწერი განახლებულია'

თუ studentebi ცხრილში გსურთ სტუდენტების სასურველი მონაცემის შეცვლა, ამისათვის


შექმენით ცარიელი მოთხოვნა და მასში შეიტანეთ შემდეგი ბრძანება:

UPDATE [students].dbo.studentebi
SET stipendia = 150
WHERE kursi = 2

მოთხოვნის შესრულების შემდეგ ეკრანზე გამოვა შეტყობინება ჩანაწერის დამატების


შესახებ.

გ) შექმენით ტრიგერი Washla, რომელიც studentebi ცხრილისათვის ჩანაწერის წაშლის


შემთხვევაში ეკრანზე გამოიტანს შეტყობინობას ‖ჩანაწერი წაშლილია‖.

CREATE TRIGGER Washla


ON [students].dbo.studentebi
FOR DELETE
AS PRINT N'ჩანაწერი წაშლილია'

149
თუ studentebi ცხრილიდან გსურთ წაშალოთ ნებისმიერი სტუდენტის მონაცემი, ამისათვის
შექმენით ცარიელი მოთხოვნა და მასში შეიტანეთ შემდეგი ბრძანება:

DELETE FROM [students].dbo.studentebi


WHERE gvari=N'ბერიძე' AND saxeli=N'გიორგი'

მოთხოვნის შესრულების შემდეგ ეკრანზე გამოვა შეტყობინება ჩანაწერის წაშლის შესახებ.

დ) ამ მაგალითში studentebi ცხრილიდან სტუდენტის მონაცემის (ჩანაწერის) წაშლასთან


ერთად სრულდება კოდი BEGIN და END შორის. ის შედგება ორი DELETE ბრძანებისაგან.
პირველი ბრძანება shefaseba ცხრილიდან წაშლის ყველა იმ ჩანაწერს, რომელიც დაკავშირებულია
studentebi ცხრილის ჩანაწერთან. ანუ როცა [students].dbo.shefaseba.kodi ტოლია წასაშლელი
სტუდენტის [students].dbo.studentebi.kodi-ის. შემდეგ studentebi ცხრილში წაიშლება თვით
სტუდენტის ჩანაწერებიც.

CREATE TRIGGER studentis_washla


ON[students].dbo.studentebi
FOR DELETE
AS
BEGIN
DELETE [students].dbo.shefaseba
FROM deleted
WHERE deleted.[kodi]=[students].dbo.shefaseba.[kodi]
DELETE [students].dbo.studentebi
FROM deleted
WHERE deleted.[kodi]= [students].dbo.studentebi.[kodi]
END

შენიშვნა: მოცემულ მაგალითში წასაშლელი ჩანაწერი აღნიშნულია საკვანძო deleted


სიტყვით.

ინფორმაცია ტრიგერების შესახებ მოთავსებულია მიმდინარე მონაცემთა ბაზის sys.triggers


სისტემურ წარმოდგენაში (SELECT * FROM sys.triggers).

150
შენიშვნა: ტრიგერის შესაცვლელად გამოიყენება ALTER TRIGGER, ხოლო – წასაშლელად
DROP TRIGGER ბრძანება.

12.2. Managament studio უტილიტის საშუალებით ტრიგერის შექმნა

ტრიგერები თითოეული ცხრილისათვის იქმნება ცალკ-ცალკე და ინახება Triggers


ფოლდერში. თქვენს შემთხვევაში Triggers ფოლდერი შედის studentebi ცხრილის
შემადგენლობაში (სურ.12.1).

სურ.12.1. ობიექტთა მიმომხილველი

მაგალითები:
ა) შექმენით ტრიგერი, რომელიც გამოიტანს შეტყობინებას ‘‘ჩანაწერი დამატებულია‘‘ იმ
შემთხვევაში, როცა studentebi ცხრილს დაემატება ჩანაწერი. შექმენით ახალი ტრიგერი,
ამისათვის Triggers ფოლდერის კონტექსტურ მენიუში შეასრულეთ New Triggers ბრძანება.
ეკრანზე გამოვა ფანჯარა ახალი ტრიგერით (სურ.12.2).

151
1

სურ.12.2. ახალი ტრიგერის შექმნის ფანჯარა

ტრიგერის სტრუქტურა შეიცავს:


1. ფუნქციის სახელის განსაზღვრის არე (Triggers Name);
2. არე, რომელიც გიჩვენებთ თუ რომელი ცხრილისათვის იქმნება ტრიგერი
(Table_Name);
3. არე, რომელიც გიჩვენებთ თუ როდის უნდა შესრულდეს ტრიგერი (INSERT - როცა
საჭიროა ცხრილში ჩანაწერის შექმნა, DELETE - როცა საჭიროა ცხრილში ჩანაწერის წაშლა და
UPDATE - როცა საჭიროა ცხრილში ჩანაწერის შეცვლა) და როგორ უნდა შესრულდესიგი (ALTER
- ოპერაციის შესრულების შემდეგ, INSTEAD OF - ოპერაციის შესრულების ერთად);
4. ტრიგერის ტანი, რომელიც შეიცავს დაპროგრამების T-SQL ენის ბრძანებებს;
ახალი ტრიგერის ფანჯარაში შეიტანეთ კოდი ისე, როგორც ეს სურ.12.3-ზეა მოცემული.

სურ.12.3. ახალი ტრიგერის - [damatebis indikatori]–ის შექმნის ფანჯარა

152
სურ.12.3-დან ჩანს, რომ შესაქმნელი ტრიგერი [damatebis indikatori] შესრულდება studentebi
ცხრილში (on dbo.studentebi) ჩანაწერის დამატების შემდეგ (ALTER INSERT). ჩანაწერის
დამატების შემდეგ ტრიგერი ეკრანზე გამოიტანს შეტყობინებას ‘‘ჩანაწერი დამატებულია‘‘
(PRINT N'ჩანაწერი დამატებულია').
შეტანილი კოდის შესრულებისათვის მაუსი დააწკაპუნეთ !Execute ღილაკზე. ეკრანის ქვედა
ნაწილში გამოვა შეტყობინება Command(s) completed successfully.
ახალი ტრიგერის მუშაობის შემოწმებისათვის შექმენით ცარიელი მოთხოვნა და მასში
შეიტანეთ ბრძანება, რომელიც წარმოდგენილია სურ.12.4-ზე.

სურ.12.4. studentebi ცხრილშიჩანაწერის დამატების კოდი

შენიშვნა: VALUES–ის მნიშვნელობები ზუსტად იმ თანმიმდევრობით უნდა შეიტანოთ,


როგორც ეს studentebi ცხრილში ველებია შექმნილი (ანუ ეს არის studentebi ცხრილისათვის
ველის მნიშვნელობების შეტანა). მოცემული მნიშვნელობები ერთმანეთისაგან გამოყოფილია
მძიმით. შეგიძლიათ შეიტანოთ NULL ცარიელი მნიშვნელობაც.

შეტანილი ბრძანების შესრულებისათვის მაუსი დააწკაპუნეთ !Execute ღილაკზე. ცხრილს


დაემატება ახალი ჩანაწერი და ტრიგერი გამოიტანს შეტყობინებას ‘‘ჩანაწერი დამატებულია‘‘
(სურ.12.5).

სურ.12.5. ტრიგერის მიერ გამოტანილი შეტყობინება

153
ბ) შექმენით ტრიგერი, რომელიც გამოიტანს შეტყობინებას ‘‘ჩანაწერი შეცვლილია‘‘.
შექმენით ახალი ტრიგერი, ისე როგორც ზემოთ იყო აღწერილი. მიღებულ ფანჯარაში შეიტანეთ
შემდეგი კოდი (სურ.12.6).

სურ.12.6. ახალი ტრიგერის - [shecvlis indikatori]–ის შექმნის ფანჯარა

როგორც სურ.12.6-დან ჩანს, რომ ახალი ტრიგერი [shecvlis indikatori] სრულდება studentebi
ცხრილში (ON [studentebi].dbo.studentebi) ჩანაწერის ცვლილების შემდეგ (AFTER UPDATE).
ჩანაწერის ცვლილების შემდეგ ეკრანზე გამოვა შეტყობინება ‘‘ჩანაწერი შეცვლილია‘‘ (PRINT
N'ჩანაწერი შეცვლილია'). შეასრულეთ შეტანილი კოდი. ფანჯრის ქვედა ნაწილში გამოვა
შეტყობინება command(s) compledted successtully.
შექმნილი ტრიგერის მუშაობის შემოწმებისათვის შექმენით ახალი მოთხოვნა და მასში
შეიტანეთ სურ. 12.7-ზე წარმოდგენილი ბრძანება.

სურ.12.7. studentebi ცხრილშიჩანაწერის შეცვლის კოდი

შეტანილი ბრძანების შესრულებისათვის მაუსი დააწკაპუნეთ !Execute ღილაკზე. studentebi


ცხრილში ჩანაწერი შეიცვლება (ბაბილოძე ზურაბის სტიპენდია გახდება 300–ის ტოლი) და
ტრიგერი გამოიტანს შეტყობინებას ‘‘ჩანაწერი შეცვლილია‘‘.

გ) შექმენით ტრიგერი, რომელიც students ცხრილიდან გამოიტანს შეტყობინებას ჩანაწერის


წაშლის შესახებ. შექმენით ახალი ტრიგერი და მასში შეიტანეთ სურ.12.8-ზე წარმოდგენილი
კოდი:

154
სურ.12.8. ახალი ტრიგერის - [washlis indikatori]–ის შექმნის ფანჯარა

შესაქმნელი ტრიგერი [washlis indikatori] სრულდება studentebi (ON students.dbo.studentebi)


ცხრილიდან ჩანაწერების წაშლის შემდეგ (ALTER DELETE). ჩანაწერის წაშლის შემდეგ ტრიგერი
გამოიტანს შეტყობინებას „ჩანაწერი წაშლილია― (PRINT N'ჩანაწერი წაშლილია').
შეასრულეთ კოდი, რომელიც წარმოდგენილია სურ.12.8–ზე. ფანჯრის ქვედა ნაწილში
გამოვა შეტყობინება command(s) compledted successfully.
[washlis indikatori] ტრიგერის მუშაობის შემოწმებისათვის studentebi ცხრილიდან წაშალეთ
სასურველი ჩანაწერი, ამისათვის შექმენით ახალი მოთხოვნა და მასში შეიტანეთ სურ.12.9-ზე
წარმოდგენილი ბრძანება:

სურ.12.9. studentebi ცხრილშიჩანაწერის წაშლის კოდი

შეტანილი ბრძანების შესრულებისათვის მაუსი დააწკაპუნეთ !Execute ღილაკზე. ჩანაწერის


წაშლის შემდეგ [washlis indikatori] ტრიგერი გამოიტანს შეტყობინებას ‘‘ჩანაწერი წაშლილია‘‘.
მონაცემთა მთლიანობის უზრუნველყოფისათვის შეიძლება ტრიგერის გამოყენება.
მაგალითად, [studentis washla] ტრიგერის შექმნისას, რომელიც studentebi ცხრილიდან ჩანაწერის
წაშლის შემთხვევაში, ჯერ წაშლის ამ სტუდენტის იმ ჩანაწერს, რომელიც shefaseba ცხრილში
მდებარეობს, ხოლო შემდეგ - studentebi ცხრილში.

დ) შექმენით ახალი ტრიგერი და მასში შეიტანეთ სურ.12.10-ზე წარმოდგენილი კოდი:

155
სურ.12.10. ახალი ტრიგერის - [studentis washla]–ის შექმნის ფანჯარა

შესაქმნელი ტრიგერი [studentis washla] შესრულდება studentebi (ON [students].dbo.studentebi)


ცხრილიდან ჩანაწერს წაშლის ერთად (INSERT OF DELETE).

შენიშვნა: ტრიგერის ჩანაწერის წაშლასთან ერთად შეიქმნება დროებითი Deleted მუდმივა,


რომელიც შეიცავს იმ ცხრილის სახელს, რომლიდანაც უნდა განხორციელდეს ჩანაწერის წაშლა.

ტრიგერის გაშვების შემდეგ shefaseba ცხრილიდან წაიშლება ის ჩანაწერი, რომლის kodi


ველის მნიშვნელობა ტოლია იმ ველის მნიშვნელობის, რომელიც არის studentebi ცხრილში. ეს
ოპერაცია შესრულდება შემდეგი ბრძანებით:

DELETE [students].dbo.shefaseba
FROM deleted
WHERE Deleted.kodi=[students].dbo.shefaseba.kodi

შემდეგ წაიშლება ჩანაწერი studentebi ცხრილიდან, რომელიც წაიშლება ტრიგერის


შესრულებამდე. წაშლა სრულდება შემდეგი ბრძანებით:

DELETE [students].dbo.studentebi
FROM deleted
WHERE Deleted.kodi=[students].dbo.studentebi.kodi

შეასრულეთ კოდი, რომელიც მოცემულია სურ.12.10–ზე. ეკრანის ბოლო ნაწილში გამოვა


შეტყობინება command(s) compledted successfully.
156
[studentis washla]ტრიგერის მუშაობის შემოწმებისათვის შექმენით ახალი მოთხოვნა და
მასში შეიტანეთ შემდეგ კოდი (სურ.12.11):

სურ.12.11. studentebi და shefaseba ცხრილებშიჩანაწერის წაშლის კოდი

ტრიგერის შესრულებისას ჯერ shefaseba ცხრილიდან წაიშლება მოცემული სტუდენტის


ყველა ჩანაწერი, ხოლო შემდეგ წაიშლება studentebi ცხრილიდან შესაბამისი ჩანაწერი ისე, რომ
მონაცემთა მთლიანობა არ დაირღვევა.

შენიშვნა: [studentis washla]ტრიგერის გამოყენების გარეშე თქვენ არ შეგიძლიათ ჩანაწერების


წაშლა studentebi ცხრილიდან. წაშლის ბრძანება იქნება დაბლოკილი (შექმნილი დიაგრამის
გამო).

157
ლექცია №15

MS SQL SERVER–ში მონაცემთა ბაზის სტრუქტურა

მონაცემთა ბაზის ფიზიკური ორგანიზების დაგეგმვა არის მონაცემთა ბაზების, ფაილებისა


და ფაილთა ჯგუფების ადმინისტრატორული სამუშაოს განსაკუთრებული ნაწილი. ცუდი
ფიზიკური ორგანიზებით მონაცემთა ბაზა იმუშავებს მცირე მწარმოებულობით.

13.1. მონაცემთა ბაზის შექმნა და გაწყობა

ახალი მონაცემთა ბაზა წარმოადგენს model მონაცემთა ბაზის ასლს, რომლის ყველა
პარამეტრები დაკოპირდება ახალ მონაცემთა ბაზაში. გულისხმობით მონაცემთა ბაზა შეუძლია
შექმნას მხოლოდ იმ მომხმარებელმა, რომლებსაც დანიშნული აქვთ sysadmin და dbcreator
როლები.
მონაცემთა ბაზის შექმნა ხორციელდება შემდეგი ბრძანებით:

CREATE DATABASE<მონაცემთა_ბაზის_სახელი>
[ON [PRIMARY] (NAME = '<ფაილის_ლოგიკური_სახელი>',
FILENAME = '<ფაილის_ფიზიკური_სახელი>'
[, SIZE = <ზომა>]
[, MAXSIZE = {<მაქსიმალური_ზომა> | UNLIMITED} ]
[, FILEGROWTH = <ზომის_ ნაზრდის_ბიჯი> [Mb | Kb | %] )
[ {FILEGROUP<ფაილთა_ ჯგუფის_სახელი>} ]
[, ...n ]
[LOG ON (NAME = '<ფაილის_ლოგიკური_სახელი>',
FILENAME = '<ფაილის_ფიზიკური_სახელი>'
[, SIZE = <ზომა>]
[, MAXSIZE = {<მაქსიმალური_ზომა>| UNLIMITED} ]
[, FILEGROWTH = <ზომის_ნაზრდის_ბიჯი>[Mb | Kb | %] )
[, ...n ]

პარამეტრების აღწერა:

158
 PRIMARY - განსაზღვრავს როგორც პირველად ფაილს, ან როგორც პირველად ფაილურ
ჯგუფის წევრს, თუ ეს პარამეტრი მოხსნილია, მაშინ ოპერატორში მთავარი ფაილი იქნება
პირველი ფაილი და შენახვისათვის გამოიყენება პირველადი ფაილური ჯგუფი;
 NAME - განსაზღვრავს ფაილის ლოგიკურ სახელს. გულისხმობით ემთხვევა ფაილის
ფიზიკურ სახელს, რომელიც განსაზღვრულია FILENAME ოპერატორში;
 FILENAME - მიუთითებს ფაილის სრულ გზას და ფიზიკურ სახელს;
 SIZE - მიუთითებს ფაილის ზომას: მეგაბაიტებში და კილობაიტებში. მინიმალური
შესაძლო მნიშვნელობაა 512 კბაიტი. გულისხმობით მთავარი ფაილის ზომა ტოლია model
მონაცემთა ბაზის ზომის. გულისხმობით მონაცემთა დამატებითი ფაილების და ჟურნალის ზომა
ტოლია 1 მგბაიტის;
 MAXSIZE - მიუთითებს მაქსიმალურ ზომას, სადამდეც შეუძლია გაიზარდოს ფაილმა. თუ
ეს პარამეტრი არაა მითითებული, მაშინ დადგება UNLIMITED მნიშვნელობა, რომლის
საშუალებითაც ფაილის ზომა შეიძლება გაიზარდოს შეუზღუდვადაც;
 FILEGROWTH - აძლევს ფაილის გაზრდის ბიჯს, თანაც ნული ნიშნავს ზომის გაზრდის
აკრძალვას: მნიშვნელობა მითითებულია მეგაბაიტებში, კილობაიტებში, ან პროცენტებში
გულისხმობით. ნაზრდი - 10%, თუ არაა მითითებული ერთეული, მაშინ რიცხვი აღდგება
მეგაბაიტებში;
 FILEGROUP - განსაზღვრავს ფაილების ჯგუფის სახელს, რომელშიც ინახება ფაილი.
მონაცემთა ბაზის შესახებ ინფორმაციის ნახვისათვის, ფაილების და ფაილთა ჯგუფისათვის
გამოიყენება შემდეგი შენახული პროცედურები;
 sp_helpdb [მონაცემთა ბაზა] - ინფორმაცია, მონაცემთა ბაზისა და მისი გაწყობის შესახებ;
 sp_helpfile ['სახელი'] - ინფორმაცია ფაილების შესახებ, რომლებიც მიეკუთვნებიან
მიმდინარე მონაცემთა ბაზას. თუ ფაილის სახელი არაა მითითებული, მაშინ გამოჩნდება ამ
მონაცემთა ბაზის ყველა ფაილის შესახებ ინფორმაცია;
 sp_helpfilegroup [‗სახელი‘] - მიმდინარე მონაცემთა ბაზაში ყველა ფაილთა ჯგუფის შესახებ
ინფორმაცია. თუ მითითებულია ფაილთა ჯგუფის სახელი, მაშინ გამოიტანება თითოეულ
ფაილთა ჯგუფის შესახებ ინფორმაცია;
 sp_spaceused ['ობიექტი'] - ცნობები დისკური არის შესახებ, რომელსაც მითითებული
ობიექტები იყენებენ.
მონაცემთა ბაზას ზემოთ ჩამოთვლილი ფიზიკური პარამეტრების გარდა აქვს აგრეთვე
ლოგიკური პარამეტრები. მხოლოდ მფლობელს და სისტემურ ადმინისტრატორს აქვს უფლება

159
შეცვალოს ეს პარამეტრები. პარამეტრების მართვისათვის გამოიყენება სისტემური შენახული
sp_dboption პროცედურა:

sp_dboption [ [@dbname=] ‗ბაზის სახელი‘] [, [@option=]‗ ‘] [, [@value=] ON|OFF]

მაგალითი: შექმენით მონაცემთა ბაზა students5 ჟურნალით. ამისათვის გამოიყენება CREATE


DATABASE ბრძანება:

CREATE DATABASE students5


ON
( NAME = students5_dat,
FILENAME = 'd:\ students5dat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = students5_log,
FILENAME = 'd:\ students5log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )

შეასრულეთ კოდი. ეკრანის ბოლო ნაწილში გამოვა შეტყობინება command(s) compledted


successfully.
საჭირო პარამეტრებით შექმნილი მონაცემთა ბაზის (students5) ნახვისათვის შეასრულეთ
შემდეგი კოდი:

sp_helpdb students5

ეკრანზე გამოვა სურ.13.1–ზე წარმოდგენილი ინფორმაცია:

160
სურ.13.1. მონაცემთა ბაზის შექმნის შედეგი

13.2. ცვლილებები მონაცემთა ბაზაში

მონაცემთა ბაზის წაშლა ხორციელდება შემდეგი ბრძანების დახმარებით:

DROP DATABASE მონაცემთა_ბაზის_სახელი [,...n]

შედეგად წაიშლება ყველა ფაილი, რომელსაც მონაცემთა ბაზა იყენებს. მონაცემთა ბაზის
წაშლის უფლება აქვს მონაცემთა ბაზის და sysadmin მომხმარებლის როლის მფლობელს. ეს
უფლება არ შეიძლება გადაეცეს სხვა სააღრიცხვო ჩანაწერს.
მონაცემთა ბაზის მფლობელის შეცვლა ხორციელდება სპეციალური შენახული
პროცედურით. მფლობელად შეიძლება გახდეს ნებისმიერი სააღრიცხვო ჩანაწერი, რომელიც
მიმდინარე მომენტში არ წარმოადგენს ბაზის მომხმარებელს, მაგალითად:

sp_changedbowner [[@loginname=] 'მომხმარებლის_ სახელი'

13.3. მონაცემთა ბაზაზე სახელის შეცვლა ხორციელდება სპეციალური შენახული


პროცედურით:

sp_renamedb [@old_name=] 'ძველი_ სახელ', [@new_name=] 'ახალი_სახელი'

მონაცემთა ბაზის სახელის შეცვლისათვის აუცილებელია გადაიყვანოთ ის


ერთმომხმარებლიანი მუშაობის რეჟიმში.
არსებული ჟურნალის ფაილებისა და მონაცემთა ფაილის მართვისათვის, დამატებითი
მონაცემთა ფაილებისა ან ჟურნალის დამატება, ფაილთა წაშლა, აგრეთვე ფაილთა ჯგუფთან
მუშაობისათვის გამოიყენება ბრძანება:

ALTER DATABASE მონაცემთა_ბაზა


{ ADD FILE <მითითება_ფაილზე> [TO FILEGROUPდასახელება]
| ADD LOG FILE <მითითება_ფაილზე>
| REMOVE FILE ფაილის_ლოგიკური_ტიპი
| ADD FILEGROUP ჯგუფის_სახელი
| REMOVE FILE GROUP ჯგუფის_სახელი
| MODIFY FILE <მითითება_ფაილზე>

161
| MODIFYFILE GROUP ჯგუფის_სახელი}
სადაც <მითითება_ფაილზე> =
(NAME = 'ფაილის_ლოგიკური_ტიპი',
FILENAME = 'ფაილის_ფიზიკური_ტიპი'
[, SIZE = ზომა]
[, MAXSIXE = {მაქსიმალური_ზომა | UNLIMITED} ]
[, FILEGROWTH = ზომის_ნაზრდის_ბიჯი [Mb| Kb | %] )

მოცემული ბრძანება საშუალებას იძლევა არსებულ ფაილურ ჯგუფს დაამატოს ფაილი,


წაშალოს ფაილები (ამ დროს ფაილი წაიშლება ფიზიკურად), ამატებს და წაშლას ფაილთა ჯგუფს,
არსებული ფაილებისათვის ფიზიკური პარამეტრების ცვლილება, აგრეთვე ფაილთა ჯგუფის
თვისებების ცვლილება: READONLY, READWRITE , DEFAULT (ამ თვისებების განსაზღვრისათვის
ამ ჯგუფში შეიტანება ფაილები, რომელსაც პარამეტრებში არა აქვს განსაზღვრული ჯგუფზე
მიკუთვნება. გულისხმობით დაყენებით თავდაპირველად ითვლება პირველი ფაილური
ჯგუფი).

13.4. მონაცემთა ბაზის შეკუმშვა

მონაცემთა ბაზის შეკუმშვა - ეს არის პროცესი მონაცემთა ფაილის ზომების შემცირება


ფაილის გამოუყენებელი ნაწილის წაშლის გზით. არსებობს მონაცემთა ბაზის შეკუმშვის სამი
ხერხი:
 ავტომატური შეკუმშვა შესაბამისი პარამეტრის დაყენებისას მონაცემთა ბაზის გაწყობაში;
 მონაცემთა ბაზის ფაილებიდან თავისუფალი არის წაშლა MS SQL Server
ადმინისტრირების უტილიტის დახმარებით;
 მითითებული ფაილების (ან ფაილთა ჯგუფის) ზომების შემცირება, აგრეთვე, ფაილების
შემცველობის წაშლა მათი შემდგომი წაშლისათვის.
მონაცემთა ავტომატური შეკუმშვა სრულდება მუდმივად განსაზღვრული ინტერვალით,
თუ დაყენებულია მონაცემთა ბაზის autoshrink პარამეტრი. ავტომატური შეკუმშვის ოპერაციისას
არ შეიძლება განისაზღვროს თუ, მონაცემთა ბაზის რომელი ნაწილი აუცილებელია შეიკუმშოს.
MS SQL Server ცდილობს თვითნებურად გაათავისუფლოს მონაცემთა ბაზის გარკვეული ნაწილი.
ეს ოპერაცია მიმდინარეობს მომხმარებლის ნაკლები აქტიურობის დროს.

162
მთლიანი მონაცემთა ბაზის არა ავტომატურად შეკუმშვა ხორციელდება შემდეგი ბრძანების
გამოყენებით:

DBCC SHRINK DATABASE ('მბ_სახელი', ['პროცენტი'] [,NOTRUNCATE |TRUNCATEONLY])

პარამეტრების აღწერა:
 მბ_სახელი - მონაცემთა ბაზის სახელი, რომელიც აუცილებელია შეკუმშოთ;
 პროცენტი - თავისუფალი არის პროცენტული რაოდენობა, რომელიც სასურველია
შეკუმშვის შემდეგ დატოვოთ;
 NOTRUNCATE - კრებსითი არე არ უბრუნდება ოპერაციულ სისტემას, რეზერვირდება
ფაილად, ანუ მონაცემთა ბაზის ფიზიკური ზომა არ მცირდება;
 TRUNCATEONLY - თავისუფალი არე წაიშლება ფაილში ექსტენტის (მეხსიერების უწყვეტი
არე) ბოლო გამოყენებისას, ამ შემთხვევაში მონაცემები არ გადაადგილდება, ხოლო პროცენტი
პარამეტრი იგნორირდება.
მონაცემთა ბაზის შეკუმშვის უფლება გაცემულია მხოლოდ sysadmin როლის წევრებისათვის
და მონაცემთა ბაზის მფლობელისათვის. მონაცემთა ბაზის შეკუმშვის შემდეგ გამოდის
ანგარიშგება, რომელშიც მითითებულია:
 გვერდების რაოდენობა, რომელამდეც იკუმშება ფაილი;
 გამოთვლადი გვერდის რაოდენობა, რომელშიც მოთავსდება ფაილის ყველა მონაცემი;
 გვერდების რაოდენობა, რომელიც შეიცავს მონაცემებს;
 გვერდების რაოდენობა, რომელამდეც ფაილს შეუძლია შეიკუმშოს.
არ შეიძლება მონაცემთა ბაზის შეკუმშვა თავდაპირველ ზომაზე ნაკლებად.
მონაცემთა ბაზის შეკუმშვა შეიძლება განხორციელდეს, აგრეთვე, მისი თითოეული ფაილის
შეკუმშვის გზით შემდეგი ბრძანების დახმარებით:

DBCC SHRINKFILE ('ფაილის _სახელი', ['საბოლოო_ზომა']


[, EMPTYFILE | NOTRUNCATE | TRUNCATEONLY ])

პარამეტრების აღწერა:
 ფაილის_სახელი - ფაილის ლოგიკური სახელი, რომელიც აუცილებელია შეიკუმშოს;
 საბოლოო_ზომა - სასურველი ზომა (მთელი რიცხვი მეგაბაიტებში), რომელიც უნდა
ჰქონდეს ფაილს შეკუმშვის შემდეგ. თუ ეს პარამეტრი არაა მითითებული ან მცირე მინიმალური
შესაძლო ზომაზე, მაშინ ფაილი იკუმშება მინიმალურ შესაძლო ზომამდე;

163
 EMPTYFILE - ფაილთა ჯგუფში სრულდება მონაცემთა ერთი ფაილიდან მეორეში
გადატანა;
 NOTRUNCATE - გათავისუფლებული ადგილი არ უბრუნდება ოპერატიულ მეხსიერებას,
ანუ ფაილის ზომა არ მცირდება. ამ შემთხვევაში მონაცემი კომპაქტურად განლაგდება და შეერევა
ფაილის დასაწყისს;
 TRUNCATEONLY - ხდება ფაილზე ჩამოჭრა, რომელიც იწყება ბოლო გამოყენებული
გვერდიდან. არავითარი მონაცემთა გადატანა არ მიმდინარეობს.

13.5. მონაცემთა სარეზერვო კოპირება

განსაკუთრებული ყურადღება აუცილებელია ინფორმაციის მთლიანობისათვის მიქცევა,


რომელთანაც მომხმარებელი მუშაობს. MS SQL Server ინფორმაციის სარეზერვო კოპირების
შემდეგ ტიპებს გთავაზობთ:
 მონაცემთა ბაზის სრული კოპირება (ასლი), რომელიც წარმოადგენს საწყის წერტილს
მონაცემთა ბაზის აღდგენისა წყვეტის შემდეგ, მაგრამ მონაცემის მოცულობაზე
დამოკიდებულების გამო ამ პროცესმა შეიძლება წაიღოს დიდი დრო, ამიტომ არ არის
რეკომენდირებული ის ხშირად შეასრულოთ. სრული კოპირება შეიცავს ყველა მონაცემს,
რომელიც დარეზერვირების მომენტში იყო მონაცემთა ბაზაში;
 ტრანზაქციის ჟურნალის კოპირება (ასლი) აუცილებელია მონაცემთა ყველა ცვლილების
ფიქსირებისათვის, რომელიც მიმდინარეობდა სისტემაში სარეზერვო კოპირების ბოლო
მომენტში. თვით ასლი შეიცავს ტრანზაქციის შესახებ ცნობებს და მხოლოდ მონაცემთა ბაზის
ასლთან ერთად ცდილობს დაბრუნდეს იმ თავდაპირველი მდგომარეობისათვის, რომელიც მას
წყვეტამდე ჰქონდა;
 მონაცემთა დიფერენციული კოპირება (ასლი) შეიცავს მონაცემთა ცვლილებებს, რომელიც
წარმოიქმნა მონაცემთა ბაზის ბოლო ასლის შექმნის მომენტში. ამ შემთხვევაში შეინახება
მხოლოდ ის გვერდები, რომლებმაც განიცადეს ცვლილებები. მაშასადამე, მონაცემთა ბაზის
აღდგენისათვის საკმარისია ბოლო დიფერენციული კოპირება.
სარეზერვო კოპირების შემთხვევაში აუცილებელია დამამახსოვრებული მოწყობილობის
არჩევა, ანუ განსაზღვროთ მოწყობილობა, რომელიც ასლის შექმნისათვის გამოიყენება.
მოწყობილობის დამატებისათვის გამოიყენება შენახული პროცედურა:

sp_addumpdevice 'მოწყობილობათა_ტიპი', 'ლოგიკური_სახელი', 'ფიზიკური_სახელი'

164
პარამეტრის აღწერა:
 მოწყობილობათა_ტიპი - მოწყობილობის სახელი სარეზერვო კოპირებისათვის.
დაშვებული მნიშვნელობა: TAPE (მაგნიტური ლენტა), DICK (მაგნიტური დისკი);
 ლოგიკური_სახელი და ფიზიკური_სახელი - შესაბამისად მოწყობილობის სარეზერვო
კოპირების ლოგიკური და ფიზიკური სახელი.
მონაცემთა ბაზის სარეზერვო კოპირების, ტრანზაქციის ჟურნალის, ფაილების და ფაილთა
ჯგუფების შექმნისათვის აუცილებელია გამოიყენოთ ბრძანება:

BACKUP {LOG | DATABASE } მბ_სახელი


[ FILE = 'ფაილის_ლოგიკური–სახელი', ...]
[ FILEGROUP = 'ჯგუფის_სახელი' ]
TOმოწყობილიბის_ლოგიკური_სახელი
[ WITH
[ DESCRIPTION = 'კომენტარი']
[ DIFFERENTIAL ]
[ EXPIREDATE= 'თარიღი']
[ INIT | NOINIT ] ... ]

პარამეტრის აღწერა:
 DIFERENTIAL - მონაცემთა ბაზის დიფერენციული ასლის შექმნა;
 EXPIREDATE - განისაზღვრება დრო, რომლის გასვლის შემდეგ სარეზერვო ასლი ითვლება
მოძველებულად და შეიძლება თავიდან ჩაიწეროს;
 INITINOINIT - სისტემა ახორციელებს, ან არ ახორციელებს მოწყობილობის
ინიციალირებას.
მაგალითი. შექმენით students5 მონაცემთა ბაზის სარეზერვო კოპირება. ამისათვის ჯერ
შექმენით სარეზერვო მოწყობილობა:

sp_addumpdevice 'disk', 'backupdisk', 'd:\students5.bak'

შეასრულეთ კოდი. სარეზერვო კოპირებისათვის გამოიყენეთ BACKUP ფუნქცია:

BACKUP DATABASE students5 TO backupdisk

ეკრანზე გამოვა სურ.13.2–ზე წარმოდგენილი ინფორმაცია:

165
სურ.13.2. მონაცემთა ბაზის სარეზერვო კოპირების შექმნის შედეგი

13.6. მონაცემთა ბაზის აღდგენა

მონაცემთა ბაზის აღდგენა სარეზერვო ასლიდან არსებული მონაცემთა ბაზა თავიდან


იწერება. მონაცემთა ბაზის აღსადგენად გამოიყენება ბრძანება:

RESTORE {LOG | DATABASE } მბ_სახელი


'ფაილი_ან_ფაილთა_ჯგუფი'
[ FROM მოწყობილიბის_ლოგიკური_სახელი]
[ WITH
[ DBO_ONLY ]
[ MOVE 'ფაილის_ლოგიკური–სახელი' TO 'ფიზიკური_სახელი'] ... ]

პარამეტრის აღწერა:
 DBO ONLY - აღდგენილ მონაცემთა ბაზაზე შეუძლია წვდომა მხოლოდ მის მფლობელს;
 MOVE - მიუთითებს, თუ რომელი ფიზიკური სახელი შეესაბამება აღსადგენ ფაილს.
გულისხმობით ფაილი აღდგება იგივე ფიზიკური სახელით, რომელიც მას განსაზღვრული
ჰქონდა სარეზერვო ასლის შექმნამდე.

ცხრილების შექმნა, წაშლა და მასში ცვლილებები

14.1. SQL–ით მონაცემთა ბაზის ცხრილის შექმნა

მონაცემთა ბაზის ობიექტების შექმნისათვის გამოიყენება მონაცემთა განსაზღვრის ენის


(DDL) ოპერატორები.
მონაცემთა ბაზის ცხრილი იქმნება CREATE TABLE ბრძანების გამოყენებით. ამ ბრძანებით
იქმნება ცარიელი ცხრილი, ანუ ცხრილი, რომელშიც არ არის სტრიქონები. ამ ცხრილში
მნიშვნელობათა შეტანა ხდება INSERT ბრძანებით. CREATE TABLE ბრძანება განსაზღვრავს
ცხრილის სახელს და მრავალ სახელდარქმეულ სვეტებს მითითებული თანმიმდევრობით.

166
თითოეული სვეტისთვის განსაზღვრული უნდა იყოს ტიპი და ზომა. თითოეულ შესაქმნელ
ცხრილს უნდა ჰქონდეს ერთი სვეტი მაინც.
ცხრილის შექმნისათვის SQL Server–ში პირველ რიგში აუცილებელია აქტიური გახადოთ ის
მონაცემთა ბაზა, რომელშიც გსურთ ცხრილის შექმნა. ამისათვის ახალი მოთხოვნის ჩანართში
შეიტანეთ ბრძანება: USE<ბაზის_სახელი>, ან ინსტრუმენტთა პანელზე, ჩამოშლად სიაში,
აირჩიოთ სამუშაო მონაცემთა ბაზა. მონაცემთა ბაზის არჩევის შემდეგ შეიძლება ცხრილის შექმნა.
ცხრილი იქმნება ბრძანებით, რომელსაც აქვს შემდეგი სინტაქსი:

CREATE TABLE <ცხრილის_სახელი>(<ველის_სახელი1><ტიპი1> [IDENTITY


NULL|NOTNULL], < ველის_სახელი2><ტიპი2>, … )

პარამეტრის აღწერა:
ცხრილის_სახელი – შესაქმნელი ცხრილის სახელი;
ტიპი – ველის ტიპი;
IDENTITY NULL|NOTNULL – მთვლელი ველი.

შენიშვნა: თუ ველის სახელი შეიცავს ჰარს, მაშინ ის კვადრატულ ფრჩხილებში ისმება.

მაგალითები:
ა) შექმენით students1 ცხრილი, რომელიც შეიცავს შემდეგ ველებს: studentis_ID (კავშირის
პირველადი ველი, მთვლელი), saxeli, gvari, misamarti, specialobis_ID ((კავშირის მეორადი ველი).
ამისათვის ახალი მოთხოვნის ჩანართში შეიტანეთ ბრძანება:

CREATE TABLE students1


([studentis_ID] Bigint Identity,
Saxeli Varchar(10),
gvari Varchar(15),
misamarti Varchar(100),
[specialobis_ID] Bigint)

ბ) შექმენით students2 ცხრილი, რომელიც შეიცავს შემდეგ ველებს: studentis_ID (კავშირის


პირველადი ველი, მთვლელი), NAME, SURNAME, STIPEND, KURS, CITY, BIRTHDAY და
UNIV_ID. ამისათვის ახალი მოთხოვნის ჩანართში შეიტანეთ ბრძანება:

CREATE TABLE students2


(STUDENT_IDINTEGER,
167
NAME VARCHAR(20),
SURNAME VARCHAR(20),
STIPEND INTEGER,
KURS INTEGER,
CITY VARCHAR(20),
BIRTHDAY DATE,
UNIV_ID INTEGER)

შენიშვნა: თუ აუცილებელია გამოთვლადი ველის შექმნა, მაშინ CREATE TABLE ბრძანებაში


გამოთვლადი ველის მონაცემთა ტიპის ნაცვლად საჭიროა მიუთითოთ გამოსახულება.

გ) გამოთვალეთ სამი კომპონენტის მიხედვით სტუდენტის საშუალო ქულა. ამისათვის


ახალი მოთხოვნის ჩანართში შეიტანეთ ბრძანება:

CREATE TABLE qula


(saxeliVarchar(10),
gvari Varchar(15),
I int,
II int,
III int,
[sashualo qula] AS(I+II+III)/3)

შენიშვნა: ცხრილის შესახებ ინფორმაციის მიღება შეიძლება ბრძანებით: EXEC SP_HELP


<ცხრილის_სახელი>. ცხრილის წაშლა შეიძლება ბრძანებით: DROP TABLE<ცხრილის_სახელი>.

14.2. ინდექსის გამოყენება მონაცემებზე სწრაფი წვდომისათვის

ცხრილიდან მონაცემთა ძებნა–ამორჩევის ოპერაცია (მათი ველების მნიშვნელობების


მიხედვით) შეიძლება დაჩქარდეს მონაცემთა იდექსირების გზით. ინდექსირებულ ცხრილში
ინდექსი შეიცავს სვეტის ან სვეტთა ჯგუფისა და ამ სტრიქონების იდენტიფიკატორების შესახებ
დალაგებულ სიას.
ინდექსები შეიძლება შექმნათ, როგორც ერთი, ისე მრავალი ველისათვის. თუ
მითითებულია ერთ ველზე მეტი ერთადერთი იდექსის შესაქმნელად, მონაცემები დალაგდება
პირველი ველის მნიშვნელობების მიხედვით, რომელთა მიმართაც ხორციელდება ინდექსირება.
168
ჯგუფის შიგნით დალაგება ხდება მეორე ველის მიხედვით, რომელიც მიღებულია მესამე ველის
მნიშვნელობების დალაგების შედეგად და ა.შ.
ინდექსის შექმნის ბრძანებას აქვს შემდეგი სახე:

CREATE INDEX <ინდექსის_სახელი> ON <ცხრილის_სახელი>


(<სვეტის_სახელი>[,<სვეტის_სახელი>]… )

მაგალითად, თუ shefaseba ცხრილი ხშირად გამოიყენება კონკრეტული სტუდენტის


ნიშნების, kodi ველის მნიშვნელობების მიხედვით, ძებნისათვის საჭიროა შექმნათ ინდექსი ამ
ველისათვის.

CREATE INDEX kodi_1 ON shefaseba(kodi)

ინდექსის მოშლისათვის (მისი სახელის ცოდნა აუცილებელია) გამოიყენება DROP INDEX


ბრძანება. მას აქვს შემდეგი სინტაქსი:

DROP INDEX <ინდექსის_სახელი>

ინდექსის მოშლა არ იწვევს ველის (ველების) შემცველობის შეცვლას, რომლის იდექსიც


იშლება.

14.3. არსებულ ცხრილებში ცვლილებები

არსებული ცხრილის სტრუქტურისა და პარამეტრების მოდიფიკაციისათვის გამოიყენება


ALTER TABLE ბრძანება. ამ ბრძანების სინტაქსი არი შემდეგი სახის:

ALTER TABLE <ცხრილის_სახელი> ADD (<სვეტის_სახელი><მონაცემთა_ტიპი><ზომა>)

ამ ბრძანებით ცხრილში არსებულ სტრიქონებს დაემატება ახალი სვეტი, რომელშიც


შეტანილია NULL-მნიშვნელობა. ეს სვეტი ბოლო იქნება ცხრილში. შეიძლება დაამატოთ
რამდენიმე სვეტი, ამ შემთხვევაში ALTER TABLE ბრძანებაში მისი განსაზღვრა გამოყოფილია
მძიმით.
შეიძლება სვეტების აღწერის შეცვლაც. ხშირად ეს აუცილებელია სვეტის ზომის
ცვლილებისას. კერძოდ, მათ მნიშვნელობებზე შეზღუდვების დამატებისას ან წაშლისას. ამ
ბრძანების სინტაქსს აქვს შემდეგი სახე:

ALTER TABLE <ცხრილის_სახელი>


169
MODIFY <სვეტის_სახელი><მონაცემთა_ტიპი><ზომა/სიზუსტე>

მხედველობაში მისაღებია ის, რომ სვეტის თვისებების მოდიფიკაცია შესაძლებელია არა


ყველა შემთხვევაში, არამედ შემდეგი შეზღუდვების გათვალისწინებით:
 მონაცემთა ტიპის შეცვლა შეიძლება, თუ სვეტი ცარიელია;
 შეუვსებელი სვეტისათვის შეიძლება შეცვალოთ ზომა/სიზუსტე. სვეტის შევსებისას
ზომა/სიზუსტე შეიძლება გაზარდოთ, მაგრამ არ შეიძლება მისი შემცირება;
 NOT NULL შეზღუდვის დაყენება შეიძლება, თუ სვეტში არცერთი მნიშვნელობა არ შეიცავს
NULL. NOT NULL ოპცია შეიძლება ყოველთვის გააუქმოთ;
 შესაძლებელია შეცვალოთ მნიშვნელობა, რომელიც დაყენებულია გულისხმობის
პრინციპით.

14.4. ცხრილების წაშლა

იმისათვის, რომ წაშალოთ ცხრილი, აუცილებელია წინასწარ წაშალოთ ყველა მონაცემი


მასში, ანუ ის გადააქციოთ ცარიელ ცხრილად. ცხრილს, რომელსაც აქვს სტრიქონი, არ შეიძლება
მისი წაშლა. ცარიელი ცხრილის წაშლის ბრძანების სინტაქსს აქვს შემდეგი სახე:

DROP TABLE <ცხრილის სახელი>

14.5. მონაცემთა რამდენიმე დასაშვები მნიშვნელობის შეზღუდვა

ზემოთ განხილული იყო შეზღუდვა, როცა შესატანი მონაცემის ტიპი და ზომა ისეთივე
უნდა ყოფოლოყო, როგორც ეს შესატან სვეტებში თავდაპირველად იყო. ცხრილების აღწერისას
შეიძლება მასზე დაედოს უფრო რთული შეზღუდვები, რომელიც დაედება იმ მნიშვნელიბებს,
რომლებიც შეიტანება სვეტში ან სვეტების ჯგუფში. შეზღუდავა (CONSTRAINTS) წარმოადგენს
ცხრილის განსაზღვრის ნაწილს.
ცხრილის შექმნისას (ცვლილებისას) შესაძლებელია განისაზღვროს შესატან
მნიშვნელობებზე შეზღუდვები. ამ შემთხვევაში SQL უკუაგდებს ყველა იმ შეზღუდვას, რომელიც
არ შეესაბამება მიცემულ კრიტერიუმს. შეზღუდვა შეიძლება იყოს სტატისტიკური, შეზღუდული
მნიშვნელობით ან მნიშვნელობათა დიაპაზონით, რომელიც შეიტანება სვეტში (CHECH, NOT
NULL). მათ აქვთ კავშირები სვეტის ყველა მნიშვნელობასთან, შეზღუდული ახალი სტრიქონის
მნიშვნელობებით, რომლებიც სვეტები ან მათ ნაკრები არ შეიცავს (უნიკალური მნიშვნელობა,
170
პირველადი გასაღები). შეზღუდვა აგრეთვე განისაზღვრება იმ მონაცემთან კავშირით, რომლებიც
მდებარეობენ სხვა ცხრილში. დაუშვათ, მაგალითად, სვეტში მხოლოდ იმ მნიშვნელობების ჩასმაა
საჭირო, რომლებიც მოცემულ მომენტში, ამ ან სხვა ცხრილის, სხვა სვეტში (გარე გასაღები)
იმყოფება. ეს შეზღუდვები ატარებენ დინამიურ თავისებურებებს.
არსებობს შეზღუდვის ორი მთავარი ტიპი – შეზღუდვა სვეტებზე და შეზღუდვა ცხრილზე.
სვეტებზე შეზღუდვა (COLUMN CONSTRAINTS) გამოიყენება მხოლოდ ცალკეულ სვეტებზე,
ხოლო ცხრილზე შეზღუდვა (TABLE CONSTRAINTS) გამოიყენება ჯგუფზე, რომელიც შედგება
ერთ ან რამდენიმე სვეტისაგან. სვეტზე შეზღუდვა ემატება სვეტის განსაზღვრის ბოლოში
მონაცემთა ტიპის მითითების შემდეგ და ბოლო სვეტის განსაზღვრის შემდეგ, სვეტის აღწერის
დამთავრების წინ. გაფართოებული შეზღუდვით CREATE TABLE ბრძანების სინტაქსს აქვს
შემდეგი სახე:

CREATE TABLE <ცხრილის სახელი>


(<სვეტის სახელი><მონაცემთა ტიპი><შეზღუდვა სვეტზე>,
<სვეტის სახელი><მონაცემთა ტიპი><შეზღუდვა სვეტზე>,…
<შეზღუდვა ცხრილზე> (<სვეტის სახელი>[,<სვეტის სახელი>… ])… )

ცხრილის შეზღუდვის აღწერის შემდეგ მრგვალ ფრჩხილებში მოცემული ველი არის ის


ველი, რომელზედაც ეს შეზღუდვები ვრცელდება. სვეტებზე შეზღუდვა გამოიყენება იმ
სვეტებზე, რომლის შემდეგადაც არიან ისინი აღწერილი.
იმისათვის, რომ არ მოხდეს ველში NULL–მნიშვნელობის გამოყენება, საჭიროა ცხრილის
CREATE TABLE ბრძანებით შექმნისას, შესაბამის სვეტში, მიუთითოთ საკვანძო სიტყვა NOT
NULL. ეს შეზღუდვა გამოიყენება მხოლოდ ცხრილის სვეტებისათვის. როგოც ზემოთ იყო
ნათქვამი NULL – არის სპეციალური მარკერი, იმ ფაქტის აღსანიშნავად, რომ ველი ცარიელია.
მაგრამ ის ყოველთვის არაა სასარგებლო. პირველადი გასაღები, მაგალითად, არ შეიძლება
შეიცავდეს NULL–მნიშვნელობას (იყოს ცარიელი), რადგანაც ეს გამოიწვევდა პირველადი
გასაღების უნიკალურობის დარღვევას (პირველად გასაღებზე ცხრილის ატრიბუტების
ფუნქციური დამოკიდებულობის დარღვევა). მრავალ სხვა შემთხვევებში ასევე აუცილებელია,
რომ ველი შეიცავდეს განსაზღვრულ მნიშვნელობებს. თუ საკვანძო სიტყვა NOT NULL
განთავსდება მონაცემთა ტიპის (ასევე ზომის) შემდეგ, მაშინ ნებისმიერი მცდელობა დატოვოთ
ველის მნიშვნელობა ცარიელი (ველში შეიტანეთ NULL–მნიშვნელობა) იქნება სისტემის მიერ
უკუგდებული.

171
უსაფრთხოების სისტემები მონაცემთა ბაზებში

შესავალი. ინფორმაციის შენახვის ნებისმიერი სისტემა უნდა იყოს მაქსიმალურად


დაცული, როგორც შემთხვევითი ისე მიზანმიმართული დაზიანებისაგან ან ინფორმაციის
დამახინჯებისაგან, ანუ მონაცემთა ბაზის დაგეგმვისას აუცილებელია სისტემის ყოველი
მომხმარებლისათვის უფლებების განსაზღვრა.
MS SQL Server -ში გათვალისწინებულია უსაფრთხოების სამი დონე:
1. რეგისტრაციის დროს აუდენტიფიცირება;
2. სერვერის მიერ მხარდაჭერილი მონაცემთა ბაზაზე წვდომის უფლება;
3. მომხმარებლის უფლებები.

15.1. მომხმარებლის აუდენტიფიკაცია

ყველა დამატებაში (კომპიუტერულ სისტემებში) უსაფრთხოება პირველ რიგში ემყარება


მომხმარებლის სახელს (login) და პაროლს. MS SQL Server დაყენებისას იქნება სააღრიცხვო
ჩანაწერი sa (system administrator - სისტემური ადმინისტრატორი). MS SQL Server 2008–ში
ცარიელი პაროლის გამოყენება sa-თვის აკრძალულია. სერვერის დაყენების დროს მოითხოვება
რთული პაროლის დაყენება, რომელიც შეესაბამება Windows უსაფრთხოების პოლიტიკას.
ხშირად პრაქტიკაში არ გამოიყენება უსაფრთხოების ელემენტალური წესები:
 ერთი სახელი (login) ერთი მომხმარებლისათვის. მიუხედავად მოთხოვნის სიმარტივისა,
ხშირად რამდენიმე მომხმარებელი იყენებს შესვლის ერთი და იგივე პაროლს. განსაკუთრებით ეს
ცუდია იმ სიტუაციებში, როცა მოცემული სააღრიცხვო ჩანაწერს აქვს ადმინისტრატორის მიერ
მიცემული პრივილეგიები. რეკომენდირებულია თითოეული მომხმარებლისათვის შექმნას
ცალკე სააღრიცხვო ჩანაწერი მინიმალური უფლებებით. ასეთი მიდგომა არა მარტო ხელს
უწყობს უსაფრთხოების ამაღლებას, არამედ საშუალებას იძლევა თითოეული მომხმარებლის
მოქმედების აუდიტი განახორციელოთ.
 პაროლის მოქმედებაზე დროის დაყენება (Password expiration). პაროლის მოქმედებაზე
დროის დაყენება სასარგებლო იქნება იმ შემთხვევაში, როცა თქვენ ვიღაცას რაიმე დავალების
შესასრულებლად მიეცით პაროლი. პაროლის მოქმედებაზე დროის ამოწურვის შემდეგ მეორე
მომხმარებლისათვის მონაცემთა ბაზაზე წვდომა ავტომატურად დაიბლოკება. ასეთი პოლიტიკის
გატარების შემთხვევაში ხშირად საჭიროა პაროლების გამოცვლა, რაც დამატებით სირთულეს
შეუქმნის მომხმარებელს.
172
 პაროლის მინიმალურ სიგრძეზე შეზღუდვა და მისი სირთულე (Password Lergth).
პაროლის სიგრძის გარდა რეკომენდირებულია პაროლში ასოებისა და ციფრების გამოყენება, რაც
კიდევ უფრო ართულებს პაროლის შერჩევას. ასევე რეკომენდირებულია არ გამოიყენოთ
მარტივი სიტყვა და რიცხვები (თქვენი ან ახლობლების რეკვიზიტები).
 შესვლათა მცდელობის რაოდენობაზე შეზღუდვა (Number of Tries to Log In). ამ წესის
მთავარი ამოცანაა პაროლის შერჩევაზე შეზღუდვა. ამიტომ ნებისმიერი მცირე მნიშვნელობა,
მაგალითად, 3-5 შესვლაზე მცდელობა, სრულად დაშვებულია.
ამ წესების პრაქტიკაში რეალიზაციისათვის აუცილებელია განიხილოთ, თუ რას
წარმოადგენს MS SQL Server 2008-ში აუდენტიფიკაციის პროცესი და აუდენტიფიკაციის რომელ
ტიპებს უჭერს ის მხარს.
მომხმარებლის აუდენტიფიკაცია - ეს პროცესია, რომლის დროსაც მომხმარებელი
მომხმარებლის სახელისა და პაროლის გამოყენებით შეეძლება თუ არა MS SQL Server
დაკავშირება.
MS SQL Server შეიძლება მუშაობდეს მომხმარებლის აუდენტიფიკაციას ორ რეჟიმში. ის
იყენებს ანWindows აუდენტიფიკაციის (Windows Authentication) ან აუდენტიფიკაცია MS SQL
Server საშუალების (SQL Server Authatication) რეჟიმს.
აუდენტიფიკაციის ეს რეჟიმები გამოიყენება სხვადასხვა მომხმარებლის სააღრიცხვო
ჩანაწერისათვის. MS SQL Server საშუალებით აუდენტიფიკაციის შემთხვევაში სააღრიცხვო
ჩანაწერს და პაროლს ქმნის MS SQL Server მონაცემთა ბაზის ადმინისტრატორი, ხოლო Windows
საშუალებით აუდენტიფიკაციის შემთხვევაში - ქსელის სისტემური ადმინისტრატორი (ამ
შემთხვევაში MS SQL Server-თან დაკავშირებისათვის მომხმარებელს არ სჭირდება MS SQL Server
სააღრიცხვო ჩანაწერი).
MS SQL Server აუდენტიფიკაცია საშუალებას იძლევა შესვლისათვის განსაზღვროთ
მომხმარებლის სახელი (login) და სერვერთან დაკავშირებისათვის პაროლი. MS SQL Server
დაყენებისას იქმნება მომხმარებლის შესვლისათვის მხოლოდ ერთი სააღრიცხვო ჩანაწერი sa.

შენიშვნა: სააღრიცხვო ჩანაწერი sa განკუთვნილია სერვერის ადმინისტრირების ყველა


ფუნქციის შესრულებისათვის და სერვერზე არსებული ყველა მონაცემთა ბაზის ობიექტზე
წვდომის უფლება.

შენახული პროცედურის დახმარებით შესაძლებელია ახალი სააღრიცხვო ჩანაწერის


დამატება და მათი უფლებების განსაზღვრა.

173
15.2. სერვერის როლები

სერვერის უსაფრთხოების სისტემის სხვა ფუნდამენტს წარმოადგენს როლები. როლის ქვეშ


იგულისხმება განსაზღვრული უფლება ოპერატორების შესრულებაზე და მონაცემთა ბაზის
ობიექტებთან მუშაობის. როლი რამდენიმე მომხმარებელს აერთიანებს ჯგუფში, განაწილებული
განსაზღვრული უფლებებით, თანაც ერთ მომხმარებელს შეიძლება რამდენიმე როლი ჰქონდეს.
არსებობს სერვერის 8 მუდმივი როლი, რომლებიც წარმოადგენენ სერვერის დონეზე
ადმინისტრირების პრივილეგიას, რომელიც დამოკიდებული არაა მონაცემთა ბაზაზე:
 Sysadmin – შეუძლია MS SQL Server ნებისმიერი მოქმედების შესრულება. გულისხმობით
მასში შედის sa სააღრიცხვო ჩანაწერი და Windows ადმინისტრატორის ჯგუფის ყველა წევრი;
 Setupadmin - დაკავშირებული სერვერების სამართავად (linked servers) და პროცედურები,
რომლებიც სრულდება სერვერის გაშვების ერთად;
 Securityadmin - შეუძლია ლოგინის შექმნა და მართვა. შეცდომების ჟურნალის წაკითხვა და
მონაცემთა ბაზის შექმნა;
 Processadmin - უფლება აქვს MS SQL Server შიგნით პროცესების მართვის, მაგალითად, ამ
როლის წევრს შეუძლია დავალების დამთავრების, რომელიც მიმდინარეობს ძალიან დიდხანს;
 Dbcreator - ნებადართულია მონაცემთა ბაზის შექმნა და ცვლილება;
 Diskadmin - მონაცემთა ბაზის ფაილების მართვა: ჯგუფში ფაილის ჩართვა, მონაცემთა
ბაზის შეერთება/გამორთვა და ა. შ;
 Bulkadmin - საშუალებას იძლევა BULK INSERT ბრძანების შესრულებას, რომელიც
ცხრილში დიდი რაოდენობის ჩანაწერების ჩასმისათვის გამოიყენება.
ჩაშენებული როლების შესახებ ინფორმაციის ნახვისათვის გამოიყენება შემდეგი შენახული
პროცედურები:
 sp_helpsrvrole - აბრუნებს სერვერის როლების სიას და თითოეული როლის აღწერას;
 sp_helpsrvrolemember ['როლის სახელი'] - აბრუნებს როლების სიას და სააღრიცხვო
ჩანაწერებს, რომლებსაც ეს როლები აქვთ მინიჭებული;
 sp_srvrolepermission[‗როლის სახელი‘] - აბრუნებს ნებართვების სიას, რომლებიც ამ
როლებით იყო მინიჭებული.

შენიშვნა: თუ მითითებულია არაა აუცილებელი პარამეტრი [‗როლის სახელი‘], მაშინ


გამოიტანება ინფორმაცია, რომელიც მიეკუთვნება მხოლოდ მითითებულ როლს.

სურ. 15.1-ზე ნაჩვენებია შენახული პროცედურის გამოძახება.


174
სურ. 15.1. როლის შენახული პროცედურის გამოძახება

15.3. შესვლისათვის სააღრიცხვო ჩანაწერის მართვა

1. MS SQL Server-ში შესვლისათვის მომხმარებლის სააღრიცხვო ჩანაწერის


დამატებისათვის გამოიყენება sp_addlogin შენახული პროცედურა:

sp_addlogin [@loginame=] 'momxmareblis saagricxvo chanaweri shecvlaze'


[, [@passwd=] 'momxmareblis paroli']
[, [@defdb=] 'monacemta baza']
sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]
[ , [ @sid = ] sid ]
[, [ @encryptopt= ] 'encryption_option' ]

@defdb - მონაცემთა ბაზაა, რომელიც გულისხმობით ჩართავს ამ მომხმარებლს MS SQL


Server-ში. თუ ეს პარამეტრი არაა განსაზღვრული, მაშინ გამოიყენება master სისტემური
მონაცემთა ბაზა;
@deflanguage - ენა გულისხმობით. თუ პარამეტრი არაა მითითებული, მაშინ გამოიყენება
ენა გულისხმობით, რომელიც მოცემულია სერვერისათვის;
@sid - საიდენტიფიკაციო ნომერი (security identification number). თუ პარამეტრი არაა
მოცემული, მაშინ sid იქნება გენერირებული.
175
@encryptopt - მიუთითებს, გსურთ კი აწარმოოთ პაროლის „ხე―, ანუ პაროლის ნაცვლად
გამოიყენება „ხე―.
ეს შენახული პროცედურა ფართოდ გამოიყენება დღეისათვის. მაგრამ MS SQL Server ბოლო
ვერსიებში ის წაშლილი იქნება. მის ნაცვლად გამოიყენება შემდეგი კონსტრუქცია:

CREATE LOGIN loginName { WITH <option_list1> | FROM <sources> }

<option_list1> ::=
PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
[ , <option_list2> [ ,... ] ]

<option_list2> ::=
SID = sid
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
| CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
| CREDENTIAL = credential_name

<sources> ::=
WINDOWS [ WITH <windows_options> [ ,... ] ]
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name

<windows_options> ::=
DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language

WITH პარამეტრის საშუალებით ხორციელდება პაროლის მიცემა და უსაფრთხოების


გაწყობა, ხოლო FROM განყოფილება მიუთითებს, რომ ლოგინი უბრალოდ არ მიეკუთვნება MS
SQL Server, ხოლო ასოცირდება ან Windows სააღრიცხვო ჩანაწერით, ან სერთიფიკატით, ან
გასაღებით.
MS SQL Server ადებს რიგ შეზღუდვებს მომხმარებლის სახელზე, როლზე და პაროლზე:
176
 მომხმარებლის სახელს, როლს და პაროლს უნდა ჰქონდეს ზომა 1-დან 128 სიმბოლომდე
და არ შეიცავდეს (\) სიმბოლოს;
 მომხმარებლის სახელი არ უნდა ემთხვეოდეს საკვანძო სიტყვას და მომხმარებლის
ჩაშენებულ სახელებს;
 პაროლი შეიძლება არ შეიცავდეს არავითარ სიმბოლოებს, მაგრამ თუ პაროლის პოლიტიკა
აქტივირებულია, მაშინ ის უნდა აკმაყოფილებდეს მათ მოთხოვნებს.

2. მომხმარებელთა სახელის მიხედვით ინფორმაციის ნახვისათვის (რომელიც


გამოიყენება შესვლისათვის) გამოიყენება sp_helplogins შენახული პროცედურა. ამ პროცედურის
შესრულების მაგალითი მოცემულია სურ.15.2-ზე

სურ.15.2. მომხმარებელთა სახელის მიხედვით ინფორმაციის ნახვის შენახული პროცედურა

3. შესვლისათვის მომხმარებლის სააღრიცხვო ჩანაწერზე პაროლის შეცვლა


შესაძლებელია sp_password შენახული პროცედურით.

შენიშვნა: Transaet-SQL ბრძანებისათვის და შენახული პროცედურებისათვის დახმარების


მისაღებად შეიძლება გამოიყენოთ Management studio უტილიტა. ამისათვის აუცილებელია
მონიშნეთ ოპერატორის სახელი და ხელი დააჭირეთ F1 კლავიშზე.

ეს შენახული პროცედურა ფართოდ გამოიყენება დღევანდელ დღეს. მაგრამ MS SQL Server


ბოლო ვერსიაში ის იქნება წაშლილი. მის ნაცვლად გამოიყენება ALTER LOGIN კონსტრუქცია.

177
4. სააღრიცხვო ჩანაწერის წაშლისათვის გამოიყენება შემდეგი შენახული პროცედურა:

sp_dloplogin 'momxmareblissagricxvochanaweri shesvlaze'

ეს შენახული პროცედურა ფართოდ გამოიყენება დღევანდელ დღეს. მაგრამ MS SQL Server


ბოლო ვერსიებში ის იქნება წაშლილი. მის ნაცვლად გამოიყენება შემდეგი კონსტრუქცია:

DROP LOGIN 'momxmareblis sagricxvo chanaweri shesvlaze'

5. მომხმარებლის შესვლის სააღრიცხვო ჩანაწერისათვის სერვერული როლის


მინიჭებისათვის გამოიყენება პროცედურა:

sp_addsrvrolemember [@loginame=] 'momxmareblissagricxvochanaweri shesvlaze',

[@rolename=] 'roli '

მაგალითად:
EXEC sp_addsrrolemember 'Corporate\Helens', 'sysadmin'

6. სააღრიცხვო ჩანაწერისათვის განსაზღვრული როლის მინიჭების გაუქმება


შესრულდება შემდეგი შენახული პროცედურით:

sp_dropsrvrolemember[@loginame=] 'momxmareblissagricxvochanaweri shesvlaze',

[@rolename=] 'roli '

მაგალითად:

EXECsp_dropsrvrolemember'Jacko', 'sysadmin'

15.4. მონაცემთა ბაზაზე წვდომა და მონაცემთა ბაზის როლები

მონაცემთა ბაზა - ეს უმთავრესი ერთეულია MS SQL Server-ის უსაფრთხოების სისტემაში.


მონაცემთა ბაზაზე წვდომა შეუძლია მონაცემთა ბაზის მომხმარებელს (არ აგერიოთ MS SQL
Server შესვლის სახელთან), რომელსაც აქვს განსაზღვრული უფლებები, რომლებიც
განისაზღვრება მონაცემთა ბაზის მომხმარებლის როლებით.
მონაცემთა ბაზის როლი წარმოადგენს მონაცემთა ბაზის დონეზე ადმინისტრირების
პრივილეგიათა ნაკრებს. მონაცემთა ბაზის როლის გამოყენებისას სერვერის ყოველ სააღრიცხვო

178
ჩანაწერს ექნება სხვადასხვა უფლებამოსილება, რომელიც დამოკიდებულია თუ რომელ
მონაცემთა ბაზასთან ხორციელდება მუშაობა. არსებობს მონაცემთა ბაზის 10 ჩაშენებული როლი:
 db_awner - მასში შედის უფლება მონაცემთა ბაზის ყველა დანარჩენ როლებზე.
მომხმარებელი ღებულობს ბაზის ფლობის უფლებას;
 dp_accessadmin - მსგავსია securityadmin სერვერული როლის, იმის გამორიცხვით, რომ
ერთი მონაცემთა ბაზით არის შეზღუდვა. ის საშუალებას არ იძლევა MS SQL Server ახალი
ლოგინის შექმნის, მაგრამ შეუძლია მონაცემთა ბაზას დაამატოს ახალი მომხმარებელი;
 db_datareader - შესაძლებელია მონაცემთა ბაზის ყველა ცხრილისათვის SELECT
ოპერატორის შესრულება;
 db_datawriter - შესაძლებელია მონაცემთა ბაზის ყველა ცხრილისათვის, INSERT, UPDATE
და DELETE ოპერატორების შესრულება;
 db_ddladmin - შესაძლებელია მონაცემთა ბაზაში ობიექტების დამატება, წაშლა და შეცვლა;
 db_securityadmin - კიდევ ერთი როლი, რომელიც securityadmin სერვერის როლის მსგავსია.
db_accessadmin-გან განსხვავებით მას არ შეუძლია ბაზაში ახალი მომხმარებლის შექმნის, მაგრამ
უფლება აქვს როლების მართვის და როლის წევრობის, აგრეთვე, მონაცემთა ბაზის ობიექტების
წვდომის უფლება;
 db_dackupoperator - შესაძლებელია მონაცემთა ბაზის სარეზერვო ასლის შექმნა;
 db_denydatareader - მონაცემთა ბაზის ყველა ცხრილისათვის SELECT ოპერატორის
შესრულების აკრძალვა;
 db_denydatawriter - მონაცემთა ბაზის ყველა ცხრილისათვის INSERT, UPDATE და DELETE
ბრძანებების შესრულების აკრძალვა.
მონაცემთა ბაზის როლების შესახებ ინფორმაციის ნახვა (როგორც ჩაშენებულის, ისე
მომხმარებლის მიერ განსაზღვრული) შესაძლებელია sp_holprole შენახული პროცედურის
საშუალებით, მონაცემთა ბაზის როლების წევრების ნახვა - sp_helprolemember.

შენიშვნა: ნებისმიერ მონაცემთა ბაზაში არის სპეციალური public როლი. არ შეიძლება მისი
წაშლა. მონაცემთა ბაზის ნებისმიერი მომხმარებელი არის ამ როლის წევრი. ყოველთვის ეს
როლი გამოიყენება მოცემული სერვერის ყველა მომხმარებლისათვის გარკვეული სახის
უფლებების მისაცემად.

15.5. მომხმარებლების მიერ მონაცემთა ბაზის მართვა

179
გულისხმობით MS SQL Server მონაცემთა ბაზაში აქვს მომხმარებლის სპეციალური
სააღრიცხვო ჩანაწერი: მონაცემთა ბაზის მფლობელი (dbo – data bese owner). მონაცემთა ბაზის
მფლობელს აქვს მონაცემთა ბაზაზე ყველა შესაძლო უფლებები. მონაცემთა ბაზის მფლობელი
ავტომატურად ხდება ის, ვინც შექმნა ეს მონაცემთა ბაზა.
1. მომხმარებლის მიერ მონაცემთა ბაზის შესაქმნელად გამოიყენება შემდეგი
პროცედურა:

sp_adduser [@loginame=] 'momxmareblissagricxvochanaweri shesvlaze'


[, [@name_in_db=] 'momxmareblis saxeli']
[, [@grpname=] ‗roli‘]
sp_grantdbaccess [@loginame=] 'sagricxvochanaweri shesvlaze'
[, [@name_in_db=] 'momxmareblis saxeli']

მისი განსხვავება მდგომარეობს იმაში, რომ sp_adduser საშუალებას იძლევა პირდაპირ


მომხმარებელს მიანიჭოს მონაცემთა ბაზის განსაზღვრული როლი. ეს პროცედურა
დატოვებულია უკუ ერთობლიობის უზრუნველყოფისათვის და მუშაობის პროცესში იძახებს
sp_grantdbaccess პროცედურას.
ორივე ეს პროცედურა წაშლილი იქნება MS SQL Server ბოლო ვერსიებში. მათ ნაცვლად
გამოიყენება შემდეგი კონსტრუქცია:

CREATE USER user_name


[ { { FOR | FROM }
{
LOGIN login_name
| CERTIFICATE cert_name
| ASYMMETRIC KEY asym_key_name
}
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]

პარამეტრების აღწერა:
 User_name - მონაცემთა ბაზაში მომხმარებლის სახელი, რომლის სიგრძეც შეიძლება იყოს
128 სიმბოლომდე;
180
 LOGIN login_name - მიუთითებს თუ რომელ ლოგინთან ასოცირდება მოცემული
მომხმარებელი;
 CERTIFICATE cert_name - მიუთითებს სერთიფიკატს, რომლითაც აუცილებელია
მოცემული მომხმარებლის ასოცირება;
 ASYMETRIC KEY asum_key_name - მიუთითებს გასაღებს, რომლითაც აუცილებელია
მოცემული მომხმარებლის ასოცირება;
 WITH DEFAULT_SCHEMA=schema_name - გულისხმობით იძლევა სქემას
მომხმარებლისათვის. ობიექტების ძებნისას ის დასაწყისში იძებნება ამ სქემაში;
 WITHOUT LOGEN - მიუთითებს, რომ მომხმარებელი არსებული ლოგინით არ უნდა
ასოცირდებოდეს.

2. მომხმარებელთა სიის გამოსახვა ხორციელდება sp_helpuser პროცედურის


შესრულების შედეგში.

3. მონაცემთა ბაზის მომხმარებლის წაშლისათვის გამოიყენება პროცედურა:

sp_dropuser [@name_in_dp =] 'momxmareblis saxeli'

ეს შენახული პროცედურა წაშლილი იქნება MS SQL Server-ის ბოლო ვერსიებში. მის


ნაცვლად რეკომენდირებულია გამოიყენოთ შემდეგი კონსტრუქცია:

DROP USER 'momxmareblis saxeli'

მომხმარებლის წაშლა არ შეიძლება თუ იგი არის მონაცემთა ბაზის მფლობელი.

4. მომხმარებლის განსაზღვრული როლის მისანიჭებლად გამოიყენება პროცედურა:

sp_addrolemember [@rolename=] 'roli'


[@membername=] 'momxmarebeli'

5. მომხმარებელზე მინიჭებული როლის გასაუქმებლად გამოიყენება პროცედურა:

sp_droprolemember [@rolename=] 'roli'


[@membername=] 'momxmarebeli'

181
6. სერვერის უსაფრთხოების სისტემის ადმინისტრირების გამარტივების მიზნით
ადმინისტრატორს შესაძლებლობა აქვს მონაცემთა ბაზის როლის შექმნის და მისთვის
გარკვეული უფლებების მიცემის.
ამისათვის გამოიყენება შენახული პროცედურა:

sp_addrole [@rolename=] 'roli'

ადრე შექმნილი როლის წაშლისათვის გამოიყენება:

sp_droprole [@rolename=] 'roli'

ამრიგად, MS SQL Server-ზე წვდომა ხორციელდება შესვლისათვის სისტემის მომხმარებლის


სახელის დახმარებით, MS SQL Server-ის უსაფრთხოების სისტემაში მომხმარებლის უფლება
ეძლევა განსაზღვრული უფლებები მონაცემთა ობიექტებზე წვდომისათვის. არ უნდა აგერიოთ
მომხმარებლის სახელი შესვლისათვის და მონაცემთა ბაზის მომხმარებლის სახელი ობიექტზე
წვდომისათვის.
ყველა ზემოთ აღწერილი მოქმედება სისტემის უსაფრთხოების ორგანიზების შესახებ
შეიძლება შესრულდეს აგრეთვე გრაფიკულ ინტერფეისის Managament studio უტილიტის
გამოყენებით.

15.6. შესვლისათვის სააღრიცხვო ჩანაწერის მართვა

იმ სიის ნახვა, რომელშიც სააღრიცხვო ჩანაწერებია და მათი პარამეტრები ხორციელდება


სერვერის security ფოლდერში Logins ჯგუფის არჩევით. მომხმარებლების სააღრიცხვო ჩანაწერები
წარმოდგენილია Name ველში, Default adaatabase ველში - მონაცემთა ბაზის სახელი, რომელთანაც
მომხმარებელი ჩართულია გულისხმობით.
შესვლისათვის ახალი სააღრიცხვო ჩანაწერის შექმნისათვის აუცილებელია New Login...
ბრძანების შესრულება. ეს ბრძანება გამოჩნდება Logins ფოლდერის კონტექსტურ მენიუში.
ეკრანზე გამოსულ დიალოგურ ფანჯარაში მიუთითეთ (სურ.15.3):

182
სურ.15.3. ახალი სააღრიცხვო ჩანაწერის შექმნის ფანჯარა

 General ჩანართი: მომხმარებლის სახელი, აუდენდიფიკაციას ტიპი (MS SQL server


აუდენდიფიკაციის შემთხვევაში მიეცით პაროლი), მონაცემთა ბაზა, რომელთანაც
მომხმარებელი ავტომატურად ირთვება და ენა გულისხმობით;
 Server Roles ჩანართი: სერვერის როლი, სადაც უნდა შევიდეს შესაქმნელი სააღრიცხვო
ჩანაწერი;
 User Mapping ჩანართი: სერვერზე შექმნილ ერთ-ერთ მონაცემთა ბაზაზე წვდომა, User
ველში შეიტანეთ მონაცემთა ბაზის მომხმარებლის სახელი და ჩართეთ შესაქმნელი
მომხმარებლისათვის ერთი არსებული როლი.
მომხმარებლის ველისათვის არსებული სააღრიცხვო ჩანაწერისათვის პარამეტრების
ცვლილებებისათვის აუცილებელია აირჩიოთ სიიდან და შეასრულოთ კონტექსტური მენიუს
proportions ბრძანებას, წაშლისათვის - Delete.

183
15.7. სერვერის როლების მართვა

სერვერის როლების ნახვისათვის აუცილებელია security ფოლდერში აირჩიოთ server roles


ჯგუფი. მომხმარებლის ნახვა, რომლებიც შედიან ამ როლში და ნებართვა, მასზე მინიჭება,
ხორციელდება ბრძანებით მოქმედება - თვისებები.
სერვერის ჩაშენებული როლი არ შეიძლება წაიშალოს სისტემიდან, და არ შეიძლება მისი
უფლებების შეცვლა, აგრეთვე აკრძალულია შექმნა და სერვერის საკუთარი როლი.

15.8. მომხმარებლის შესაძლებლობა

Transact-SQL ენის ოპერატორების შესრულება და მოქმედება სისტემაში შესაძლებელია


შესრულდეს მხოლოდ მომხმარებლის აუდენტიფიკაციის შემდეგ. მომხმარებლისაგან Transact–
SQL ოპერატორის მიღებისას სერვერი ამოწმებს, აქვს თუ არა მომხმარებელს უფლება შესაბამის
მოქმედების შესრულების. თუ უფლება აქვს, მაშინ მოქმედება შესრულდება, წინააღმდეგ
შემთხვევაში გამოვა შეცდომაზე შეტყობინება.
მოქმედება, რომელიც შეიძლება შეასრულოს მომხმარებელმა, განისაზღვრება უფლებებით,
რომელიც უშუალოდ მასზე იყო გაცემული, ანუ როლით, რისგანაც ის შედგება. ამრიგად,
მომხმარებელს შეიძლება ჰქონდეს შესაბამისი უფლება ამა თუ იმ მოქმედების შესრულების.
Ms SQL Server-ში უფლებები შეიძლება დაიყოს სამ კატეგორიად: ნებართვა
ობიექტებისათვის, ნებართვა Transact – SQL ბრძანებებისათვის და არაპირდაპირი ნებართვა.
სხვადასხვა ობიექტებისათვის გამოიყენება ნებართვების შემდეგი სია:
SELECT - ამ პრივილეგიის მომხმარებელს შეუძლია შეასრულოს მოთხოვნები ცხრილებში;
INSERT - ამ პრივილეგიის მომხმარებელს შეუძლია ცხრილში მონაცემების დამატება;
UPDATE - ამ პრივილეგიის მომხმარებელს შეუძლია შეცვალოს მონაცემები ცხრილში. არ
შეიძლება ეს პრივილეგია დააყენოთ ცხრილის განსაზღვრული ველებისათვის;
DELETE - ამ პრივილეგიის მომხმარებელს შეუძლია წაშალოს მონაცემები ცხრილიდან;
ALL - მომხმარებლისთვის შესაძლებელია ნებისმიერი უფლება (შესაძლებლობა).
Transact–SQL ბრძანებებისათვის შესაძლებელია მონაცემთა ბაზაში ობიექტების შექმნის
კონტროლი, თვით მონაცემთა ბაზის შექმნა და სარეზერვო ასლის შესრულების პროცედურა.

15.9. მომხმარებლის მიმართვის უფლებების მართვა

184
GRANT ბრძანება გამოიყენება მონაცემთა ბაზის ობიექტებთან მომხმარებლის მიმართვის
უფლებების მართვისათვის. მისი სინტაქსია:

GRANT
{ ნებართვა [,...n] }{ ONცხრილი | warmodgena [(veli[,...n])]
| ON [შენახული პროცედურა[,...n] }
TOსააღრიცხვო ჩანაწერი[,...n][WITH GRANT OPTION]

პარამეტრების აღწერა:
 ნებართვა - ნებართვების სია წარდგენილი მომხმარებლისთვის. თუ წარმოდგენილია
რამდენიმე ნებართვა ერთდროულად, მაშინ ისინი გაყოფილები იქნება მძიმით;
 ცხრილი, წარმოდგენა, შენახული პროცედურა - მიუთითებს მიმდინარე მონაცემთა ბაზის
კონკრეტული ობიექტების სახელებს, რომლისთვისაც აუცილებელია წვდომის წარმოდგენა. MS
SQL Server აქვს შესაძლებლობა განსაზღვროს წვდომაზე უფლება არა მარტო ცხრილის დონეზე,
არამედ ველების დონეზეც;
 სააღრიცხვო ჩანაწერი - მითითებულია უსაფრთხოების სისტემის ობიექტის სახელი,
რომელზეც გაცემულია უფლება. ობიექტის როლში შეიძლება იყოს როგორც მომხმარებლის
სააღრიცხვო ჩანაწერი ასევე მათი ჯგუფები;
 WITH GRANT OPTION - მომხმარებლისათვის შესაძლებელია, რომელზეც გაცემულია
უფლება, მათი დანიშვნის და სხვა მომხმარებლისათვის. მაგალითად, შემდეგი ბრძანების
დახმარებით students მონაცემთა ბაზის TestUser მომხმარებლისათვის ამორჩევის უფლების
გადაცემა და იგივე მონაცემთა ბაზის studentebi ცხრილის მონაცემების ცვლილება:

GRANT SELECT, UPDATE ON studentebi TO TestUser

შემდეგი ბრძანება Andy მომხმარებელს უფლებას აძლევს students მონაცემთა ბაზის


studentebi ცხრილის saxeli და gvari ველებისათვის.

GRANT SELECT ON studentebi (saxeli, gvari) TOAndy

15.10. წვდომის აკრძალვა

მომხმარებლისათვის მონაცემთა ბაზის ობიექტებზე წვდომის აკრძალვისათვის


გამოიყენება DENY ბრძანება:

185
DENY
{ ნებართვა [,...n] }{ ONცხრილი | წარმოდგენა[(ველი[,...n])]
| ON[შენახული პროცედურა[,...n] }
TOსააღრიცხვო ჩანაწერი [,...n][CASCADE]

ამ ბრძანების პარამეტრები ისეთივეა, როგორც ეს GRANT ბრძანების შემთხვევაში იყო.


CASCADE პარამეტრი საშუალებას იძლევა გამოიწვიოს (გააუქმოს) არა მარტო, რომელიმე
კონკრეტული მომხმარებლის, არამედ ყველა ის მომხმარებლი, რომელსაც მან გადასცა
მოცემული უფლება.

15.11. გაურკვეველი გადახდა წვდომიდან

გაურკვეველი გადახდა ისევე, როგორც წვდომაზე აკრძალვისაგან იმით განსხვავდება, რომ


მოქმედებს მხოლოდ იმ დონეზე, რომელზეც ის განისაზღვრება, ანუ გარკვეულ დონეზე
მომხმარებლისათვის წვდომაზე უარი ეთქვა, მაშინ ეს უფლება შეუძლია მიიღოს სხვა დონეზე,
მაგალითად, როლში წევრობით, თუ აქვს ამისათვის უფლება.

შენიშვნა: გულისხმობით მონაცემებზე მომხმარებლის წვდომა გაურკვევლად


უკუგდებულია.

მონაცემებზე წვდომა გაურკვეველი გადახრით გამოიყენება შემდეგი ბრძანება:

REVOKE [GRANT OPTION FOR]


{ნებართვა [,...n] }{ ONცხრილი | წარმოდგენა [(ველი[,...n])]
| ON [შენახული პროცედურა[,...n] }
TOსააღრიცხვო ჩანაწერი [,...n][CASCADE]

ამ პარამეტრების აზრი ისეთივეა, როგორც GRANT და DENY პარამეტრების შემთხვევაში


იყო. GRANT OPTION FOR პარამეტრი გამოიყენება, როცა საჭიროა უფლების გამოწვევა,
რომელიც წარმოდგენილი იყო GRANT ბრძანების WITH GRANT OPTION პარამეტრით.
მიუხედავად ამისა მომხმარებელი ინარჩუნებს ობიექტზე წვდომის უფლებას, მაგრამ კარგავს
სხვა მომხმარებლებისათვის წარმოადგენს შეერთებას.

შენიშვნა: აუცილებელია დაიმახსოვროთ შემდეგი წესი: გარჩევადობას აქვს ყველაზე


დაბალი პრიორიტეტი, ხოლო აკრძალვას - მაღალი პრიორიტეტი, ანუ მონაცემებზე წვდომა

186
შიძლება მხოლოდ ზუსტად მისი წარმოდგენით, როცა სხვა დონეზე არ არის წვდომაზე
აკრძალვა, თუ წვდობა ზუსტად არაა წარმოდგენილი, მაშინ მომხმარებელს არ შეუძლია
მონაცემებთან მუშაობა.

მომხმარებლის შესაძლებლობასთან მუშაობა სრულდება, აგრეთვე, გრაფიკულ


ინტერფეისის Management Studio უტილიტის ადმინისტრირების საშუალებით. იმისათვის რომ
ობიექტს დაუნიშნოთ უფლება აუცილებელია არჩიოთ ის User ჯგუფში ან Roles ჯგუფში. ამ
მიზნით გამოიყენება Securables ჩანართი (სურ.15.4)

სურ.15.4. მომხმარებლის შესაძლებლობის მუშაობის ფანჯარა

გამოსულ ჩანართში ჩამოთვლილია მონაცემთა ბაზის ობიექტები, რომელზეც


შესაძლებელია წვდომა. შეიძლება დააყენოთ ერთი იმ სამი წვდომის საშუალებიდან:
წარმოდგენა, აკრძალვა და გაურკვეველი გადახრა - შესაბამის ველში.

187

You might also like