Transact-SQL საფუძვლები. T-SQL პროგრამირების საფუძვლები

SQL (Structured Query Language) - ეს არის უნივერსალური კომპიუტერული ენა, რომელიც გამოიყენება მონაცემთა შესაქმნელად, შესაცვლელად და შესაცვლელად. ურთიერთობითი ბაზებიდანიკი (მოვა სტრუქტურირებული მოთხოვნები).

SQL ასე გამოიყურება როგორც ინფორმაციულ-ლოგიკური ჩემი, მაგრამ არა ჩემი პროგრამირება, მაგრამ ამავდროულად SQL გადმოსცემს მისი პროცედურული გაფართოების შესაძლებლობას, მთლიანობაში ასეთი ენის გაუმჯობესებით, ის შეიძლება ჩაითვალოს ენობრივ პროგრამირებად.

ამ საათში გაფართოვდა შემდეგი SQL სპეციფიკაციები:

მონაცემთა ბაზა და SQL სპეციფიკაცია
მონაცემთა ბაზის ტიპი SQL სპეციფიკაცია
Microsoft SQL SQL-ის ტრანზაქცია
Microsoft Jet/Access JetSQL
MySQL SQL/PSM (SQL/მუდმივი შენახული მოდული)
Oracle PL/SQL (პროცედურული ენა/SQL)
IBM DB2 SQL PL (SQL პროცედურული ენა)
InterBase/Firebird PSQL (პროცესული SQL)

ეს სტატია განიხილავს Transact-SQL სპეციფიკაციას, რადგან ის მოიგო Microsoft SQL სერვერებმა. Oskіlki ბაზა usіh specifіkatsіy SQL იგივეა, მეტი ბრძანება და სცენარი ადვილად გადადის სხვა ტიპის SQL-ზე.

დანიშვნა

Transact-SQL არის Microsoft-ის SQL პროცედურული გაფართოება. SQL ასო გაფართოებები, როგორიცაა ეს შემთხვევითი შესაძლებლობებიიაკ:

  • ძირითადი ოპერატორები,
  • ლოკალური და გლობალური ცვლილებები,
  • სხვადასხვა დამატებითი ფუნქციები მწკრივების, თარიღების, მათემატიკის და ა.შ.
  • Microsoft Windows ავთენტიფიკაციის მხარდაჭერა

Transact-SQL ენა არის SQL Server ვიკის გასაღები. ყველა პროგრამა, რომელიც ურთიერთქმედებს SQL Server-ის ეგზემპლართან, მიუხედავად მათი განხორციელებისა და ძირითადი ინტერფეისისა, აწარმოებს Transact-SQL ინსტრუქციებს სერვერზე.

ბოლო მონაცემთა ბაზა

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

ასევე, მონაცემთა ბაზის შესაქმნელად და її მნიშვნელობებით შესანახად, აუცილებელია კონსოლის გახსნა ბრძანებების შესასრულებლად და SQL სერვერის ჩამოტვირთვისა და თავდასხმის სკრიპტის ჩასაწერად:

მონაცემთა ბაზის შექმნა USE master CREATE DATABASE TestDatabase GO -- ცხრილის შექმნა USE TestDatabase CREATE TABLE მომხმარებლები (UserID int PRIMARY KEY, UserName nvarchar(40), UserSurname nvarchar(40), DepartmentID int, PositionID int) Department(a)CREATE0, TABLE პოზიცია (PositionID int PRIMARY KEY, PositionName nvarchar(40), BaseSalary money) CREATE TABLE (CustomerID int PRIMARY KEY, CustomerName nvarchar(40), CustomerAddress n PRIMARY KEY, CustomerID int int, USEGO TestDatabase INSERT Users VALUES (1, "Ivan", "Petrov", 1, 1) INSERT Users VALUES (2, "Ivan", "Sidorov", 1, 2) INSERT Users VALUES (3, "Petr", "Ivanov " , 1, 2) INSERT Users VALUES (4, "Nikolay", "Petrov", 1, 3) INSERT Users VALUES (5, "Nikolay", "Ivanov", 2, 1) INSERT Users VALUES (6, "Sergey " , "Sidorov", 2, 3) INSERT Users VALUES (7, "Andrey", "Bukin", 2, 2) INSERT Users VALUES (8 , "Viktor", "Rybakov", 4, 1) INSERT Departments VALUES ( 1) , "წარმოება") INSERT Departm ents VALUES (2, "დისტრიბუცია") INSERT დეპარტამენტები VALUES (3, "Purchasing") INSERT პოზიციები VALUES (1, "მენეჯერი", 1000) INSERT პოზიციები VALUES (2, "უფროსი ანალიტიკოსი", 650) INSERT "VALUES,1, ალექს კომპანია", "606443, რუსეთი, ბორი, ლენინას ქ., 15") INSERT VALUES (2, "Potrovka" , "115516, Moscow, Promislova str., 1") INSERT VALUES (1, 1, 1, "Special ნაწილები") წადი

Შენიშვნა. Microsoft SQL Server 2000-ისთვის ის დაკავშირებულია Query Analyzer-თან. Microsoft SQL Server 2005-ისთვის, შეამოწმეთ SQL Server Management Studio.

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

მომხმარებლები
მომხმარებლის იდენტიფიკაცია მომხმარებლის სახელი მომხმარებლის გვარი დეპარტამენტის ID პოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
3 პეტრე ივანოვი 1 3
4 ნიკოლოზი პეტროვი 1 3
5 ნიკოლოზი ივანოვი 2 1
6 სერგეი სიდოროვი 2 3
7 ანდრეი ბუკინი 2 3
8 ვიქტორ რიბაკოვი 4 1
პოზიციები
პოზიციის ID პოზიციისსახელი საბაზო ხელფასი
1 მენეჯერი 1000
2 უფროსი ანალიტიკოსი 650
3 ანალიტიკოსი 400
ადგილობრივი შეკვეთები
Შეკვეთის ნომერი კლიენტის ID მომხმარებლის იდენტიფიკაცია აღწერა
1 1 1 სპეციალური ნაწილები
დეპარტამენტები
დეპარტამენტის ID Დეპარტამენტის სახელწოდება
1 წარმოება
2 განაწილება
3 შესყიდვა
ადგილობრივი მომხმარებლები
კლიენტის ID Მომხმარებლის სახელი კლიენტის მისამართი
1 კომპანია ალექსი 606443, რუსეთი, ბორი, ლენინას ქ., 15
2 პოტროვკა 115516, მოსკოვი, პრომიშლენნაიას ქ., 1

სინტაქსის ელემენტები

სკრიპტის დირექტივები

სკრიპტის დირექტივები - ეს არის კონკრეტული ბრძანებები, რომლებიც უფრო ხშირია MS SQL-ში. Qi ბრძანებები ეხმარება სერვერს განსაზღვროს სკრიპტთან მუშაობის წესები და ტრანზაქციები. ტიპიური წარმომადგენლები: GO - სიგნალს აძლევს SQL სერვერს სკრიპტის დასასრულის შესახებ, EXEC (ან EXECUTE) - ასახავს პროცედურას ან სკალარული ფუნქციას.

კომენტარები

კომენტარები შედგენილია სკრიპტის ბლოკების ახსნა-განმარტების შესაქმნელად, ასევე ბრძანებების დროის შეზღუდვისთვის, როდესაც სკრიპტის კორექტირება ხდება. კომენტარები მწკრივის მსგავსია და ბლოკის მსგავსი:

  • -- - მწკრივის კომენტარი მოიცავს ერთზე მეტ რიგს, რომლის წინ არის ორი მინუსი.
  • /* */ - ბლოკის კომენტარი გამორიცხავს ბრძანებების მთელ ბლოკს, ინსტრუქციებს მითითებული კონსტრუქციისთვის.

ტიპი დანიჰ

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

  • ნომრები - რიცხვითი მნიშვნელობების შესანახად (int, tinyint, smallint, bigint, რიცხვითი, ათობითი, ფული, smallmoney, float, რეალური).
  • თარიღი - იმ საათის თარიღის შესანახად (datetime, smalldatetime).
  • სიმბოლოები სიმბოლოების მონაცემების შესანახად (char, nchar, varchar, nvarchar).
  • Dviykovі - ბინარული მონაცემების შესანახად (ორობითი, ვარბინარული, ბიტი).
  • მეტი ტომი - მონაცემთა ტიპები დიდი ორობითი მონაცემების შესანახად (ტექსტი, ntext, სურათი).
  • სპეციალური - ინდიკატორები (კურსორი), 16-ბაიტი თექვსმეტობითი რიცხვი, როგორც მოგება GUID-ისთვის (უნიკალური იდენტიფიკატორი), მწკრივის შეცვლის შტამპი (დროის ნიშა), მწკრივის ვერსია (რიგვერცია), ცხრილები (ცხრილი).

Შენიშვნა. რუსული სიმბოლოების შერჩევისთვის (არა ASCII კოდირება) მონაცემების ტიპები იწერება პრეფიქსით "n" (nchar, nvarchar, ntext), თითქოს სიმბოლოებს ორ ბაიტში შიფრავს. წინააღმდეგ შემთხვევაში, უნიკოდის მუშაობისთვის გამოიყენება მონაცემთა ტიპები "n"-დან.

Შენიშვნა. სიცოცხლის ცვლილების მონაცემებისთვის აკრეფილია პრეფიქსის "var" მონაცემების ტიპები. მონაცემთა ტიპები პრეფიქსის "var"-ის გარეშე შეიძლება დაფიქსირდეს მეხსიერების ზონაში, ზოგიერთი მათგანი შეიძლება შეივსოს სივრცეებით ან ნულებით.

იდენტიფიკატორები

იდენტიფიკატორი - ce სპეციალური პერსონაჟები, yakі vykoristovuyutsya zі zmіnnimi for іdentifіkatsіїїїї їkh ტიპის аbo grupuvannya slіv u zminnu. იდენტიფიკატორების ტიპები:

  • @ - ლოკალური ცვლილების იდენტიფიკატორი (koristuvach).
  • @@ - გლობალური ცვლილების იდენტიფიკატორი (შემოყვანილია).
  • # - პროცედურის ლოკალური ცხრილის იდენტიფიკატორი.
  • ## - პროცედურის გლობალური ცხრილის იდენტიფიკატორი.
  • - ცვლილებაში სიტყვათა დაჯგუფების იდენტიფიკატორი.

ცვლილებები

ტიმჩასის ხარკის გადარჩენის მიზნით სკრიპტებში ცვლილებები ხდება. Sob pratsyuvati zі zminnoyu, її აუცილებელია დაგმო, სანამ გახმოვანება შეიძლება იყოს zdіysnen გარიგებაში, ისევე როგორც გუნდი გამარჯვებულია, როგორც გამარჯვებული tsyu zminna. წინააღმდეგ შემთხვევაში, როგორც ჩანს, ტრანზაქციის დასრულების შემდეგ, შემდეგ GO, ის იცვლება.

შეცვლილი პარამეტრების შეცვლა შესაძლებელია DECLARE ბრძანებით, შეცვლილი პარამეტრების დაყენება შესაძლებელია SET ბრძანებით ან SELECT ბრძანებით:

გამოიყენეთ TestDatabase - ანონიმური ცვლილებები. შეცვლილი @EmpName-ის ნახვა SELECT @EmpName AS GO მოთხოვნის შედეგად

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

ოპერატორები

ოპერატორები - წ სპეციალური ბრძანებები, გამოიყენება ცვლილებებზე მარტივი ოპერაციების შესასრულებლად:

  • არითმეტიკული ოპერატორები: "*" - გამრავლება, "/" - გაყოფა, "%" - მოდულის ქვედანაყოფი, "+" - დამატება, "-" - დამატება, "()" - რკალი.
  • შესატყვისი ოპერატორები: "=" - ერთი, ">" - მეტი, "<" - меньше, ">=" - ერთზე მეტი, "<=" меньше или равно, "<>"- არ არის კარგი.
  • ოპერატორების შეკვეთა: "+" - სტრიქონების დახურვა.
  • ლოგიკური ოპერატორები: "AND" - ერთი, "OR" - ან, "NOT" - არა.

სისტემის ფუნქციები

Transact-SQl სპეციფიკაცია მნიშვნელოვნად აფართოებს სტანდარტულ SQL შესაძლებლობებს შემდეგი ფუნქციების ჩათვლით:

  • აგრეგატული ფუნქციები-ფუნქციები, რომლებიც მუშაობენ კოლექციებთან, აქვთ იგივე მნიშვნელობა. ტიპიური წარმომადგენლები: AVG - სვეტის საშუალო მნიშვნელობა, SUM - სვეტის ჯამი, MAX - სვეტის მაქსიმალური მნიშვნელობა, COUNT - სვეტის ელემენტების რაოდენობა.
  • სკალარული ფუნქციები არის ფუნქციები, რომლებიც ატრიალებენ ერთ მნიშვნელობას, მუშაობენ სკალარული მონაცემებით, ან ნაცვლად შეყვანის გარეშე. ტიპიური წარმომადგენლები: DATEDIFF – განსხვავება თარიღებს შორის, ABS – რიცხვის მოდული, DB_NAME – მონაცემთა ბაზის სახელი, USER_NAME – ნაკადის ხაზის ჩამწერის სახელი, LEFT – მონაცემთა რიგის ნაწილი.
  • ფუნქციები-სპეციფიკატორები-ფუნქციები, როგორიცაა vikoristovuyutsya თითქოს იძულებითი სხვა მონაცემები. ტიპიური წარმომადგენლები: OPENXML - ინდიკატორი მონაცემთა ხის XML სტრუქტურების დასათვალიერებლად, OPENQUERY - ინდიკატორი მონაცემთა ხის სხვა მოთხოვნის დასათვალიერებლად.

Შენიშვნა. ფუნქციების სრული სია შეგიძლიათ იხილოთ SQL Server Connections-ში.

Შენიშვნა. სკალარული ფუნქციების დაწყებამდე შეგიძლიათ დაამატოთ გლობალური ცვლილებები, რომლებსაც სკრიპტის ტექსტში უწოდებს დაქვემდებარებული "@@".

გამოიყენეთ TestDatabase -- wildcard-ის აგრეგაციის ფუნქცია საშუალო ხელფასის მქონე ბავშვისთვის SELECT AVG(BaseSalary) AS FROM Positions GO -- wildcard სკალარული ფუნქცია მონაცემთა ბაზის სახელის გამოკლებისთვის SELECT DB_NAME() AS GO -- wildcard სკალარული ფუნქცია სტრიმინგის საფოსტო ყუთის სახელის გამოკლებისთვის (30 ) SET @MyUser = USER_NAME() SELECT "ამჟამინდელი მომხმარებლის" მონაცემთა ბაზის მომხმარებლის სახელია: "+ @MyUser GO -- ვარიანტის საძიებო ფუნქცია სხვა სერვერიდან მონაცემების მოსაძიებლად SELECT * FROM OPENQUERY(OracleSvr, "SELECT name, id FROM მფლობელი .სათაურები") წადი

ვირაზი

Viraz არის სიმბოლოებისა და ოპერატორების ერთობლიობა, რადგან ის იღებს სკალარული მნიშვნელობას შეყვანაზე, ხოლო გამომავალზე ის იძლევა განსხვავებულ მნიშვნელობას, წინააღმდეგ შემთხვევაში იღებს სკალარული მნიშვნელობა. Transact-SQL-ს აქვს 3 ტიპი: DDL, DCL და DML.

  • DDL (Data Definition Language) - ჰაკები მონაცემთა ბაზაში ობიექტების შესაქმნელად. ამ კლასის მთავარი წარმომადგენლები არიან: CREATE - ობიექტების შექმნა, ALTER - ობიექტების შეცვლა, DROP - ობიექტების მოცილება.
  • DCL (Data Control Language) - მონაცემთა ბაზის ობიექტებზე უფლებების აღიარების აღიარება. ამ კლასის მთავარი წარმომადგენლები: GRANT - ნებადართულია ობიექტზე, DENY - შემოღობილია ობიექტთან, REVOKE - ნებადართულია ეს ღობე ობიექტზე.
  • DML - მონაცემთა მანიპულირების ენა ამ კლასის ძირითადი წარმომადგენლები არიან: SELECT - მონაცემთა შერჩევა, INSERT - მონაცემთა ჩასმა, UPDATE - მონაცემთა შეცვლა, DELETE - მონაცემთა ნახვა.

გამოიყენეთ TestDatabase -- DDL tag CREATE TABLE TempUsers (UserID int, UserName nvarchar(40), DepartmentID int) GO -- DCL tag GRANT SELECT ON მომხმარებლებს საჯარო GO -- DML ტეგი SELECT მომხმარებლის ID, მომხმარებლის სახელი + " " + მომხმარებლის გვარი AS F GO -- DDL DROP TABLE TempUsers GO ვიკი

სკრიპტის კონტროლი

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

  • დაჯგუფების ბლოკი არის სტრუქტურა, რომელიც აერთიანებს ვირუსებს ერთ ლოგიკურ ბლოკად (BEGIN ... END).
  • გონების ბლოკი - სტრუქტურა, როგორც მომღერალი გონების ხედვის გაუკუღმართების საშუალება (IF ... ELSE).
  • მარყუჟის ბლოკი - სტრუქტურა, რომელიც ორგანიზებას უწევს ლოგიკური ბლოკის გამეორებას (WHILE ... BREAK ... CONTINUE).
  • გარდამავალი - ბრძანება სკრიპტის ნაკადის მითითებულ ეტიკეტზე (GOTO) გადართვისთვის.
  • Zatrimka - გუნდი, რომელიც zatrimka vikonannya სცენარი (WAITFOR)
  • Pardon Weekly – ბრძანება, რომელიც ქმნის სკრიპტის შეწყალებას (RAISERROR)

ვირუსების დინამიური დიზაინი

შემდეგ, როცა გაიგეთ Transact-SQL-ის საფუძვლები და ივარჯიშეთ მარტივ აპლიკაციებზე, შეგიძლიათ გადახვიდეთ დასაკეცი სტრუქტურებზე. გამოიძახეთ მონაცემთა ბაზები დამატებითი სცენარებისთვის (სკრიპტების) შესაქმნელად და შესანახად - თუ ვიზუალური რედაქტორის კოპირება ადვილია, მაგრამ თქვენ არ შექმნით დიდ მონაცემთა ბაზას ხარვეზების გარეშე და არ შეინახავთ მას. როგორც კი გამოიცნობთ სტატისტიკის კობს, მაშინ შეიქმნა ბოლო მონაცემთა ბაზა და შევსებული დამატებითი სცენარისთვის. სცენარი - მხოლოდ ერთი ან მეტი ვირუსი, გაერთიანებული ლოგიკურ ბლოკში, ადმინისტრატორის მუშაობის ავტომატიზაციისთვის.

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

USE master -- დააყენეთ დინამიური მონაცემები DECLARE @dbname varchar(30), @tablename varchar(30), @column varchar(30) SET @dbname = "TestDatabase" SET @tablename = "Positions" SET @column = "BaseSalary" - - დინამიური მონაცემების ვარიანტი EXECUTE ("USE" + @dbname + "SELECT AVG(" + @column + ") AS FROM " + @tablename) GO

მონაცემთა შეგროვება

SQL მოძრაობებში, ცხრილიდან მონაცემების შერჩევა მითითებულია SELECT ბრძანების დახმარებით:

აირჩიეთ<названия колонок или *>FROM<название таблицы>

საკეტის უკან, SELECT ბრძანებას აქვს ALL პარამეტრი, რომელიც შეიძლება გამოტოვოთ. თუ ბრძანებაში მიუთითებთ DISTINCT პარამეტრს, მაშინ შედეგი მოიხმარება მხოლოდ უნიკალურ (გაუმეორებელ) ჩანაწერებს არჩევანიდან.

ბრძანებებში ობიექტების სახელების შესაცვლელად SQL სერვერზე, იცვლება AS ბრძანება. Vicoristannya tsієї ბრძანებები ხელს უწყობს რიგის ხანგრძლივი დროის დაჩქარებას და, შესაბამისად, შედეგის მიღებას ხელსაყრელი თვალებიდან.

აირჩიეთ ყველა ჩანაწერი ლოკალური კლიენტების ცხრილიდან SELECT * FROM -- აირჩიეთ მომხმარებლის სახელი სვეტის უნიკალური ჩანაწერები მომხმარებლების ცხრილიდან SELECT DISTINCT UserName FROM Users

მომხმარებლის სახელი
ანდრეი
ივანე
ნიკოლოზი
პეტრე
სერგეი
ვიქტორ

მონაცემთა გაფილტვრა ხორციელდება WHERE ბრძანების დახმარებით, ამ შემთხვევაში შემდეგი ოპერატორები და ეს ბრძანება ტოლია: =,<, >, <=, >=, <>, LIKE, NOT LIKE, და, OR, NOT, BETWEEN, NOT BETWEEN, IN, NOT IN, NULL, არ არის NULL. ველური სახით, SELECT ბრძანება ფილტრიდან ასე გამოიყურება:

აირჩიეთ<названия колонок или *>FROM<название таблицы>სად<условие>

გასწორების მწკრივში ნებადართულია სიმბოლოების და ჩანაცვლების გაძლიერება:

  • % - იქნება ეს სიმბოლოების რაოდენობა;
  • _ – ერთი პერსონაჟი;
  • - არის თუ არა სიმბოლო, მინიშნებები ტაძრებზე;
  • [^] - იყოს სიმბოლო და არა მკლავებში.
-- აირჩიეთ ყველა ჩანაწერი მომხმარებლების ცხრილიდან, სადაც DepartmentID = 1 SELECT * FROM Users WHERE DepartmentID = 1
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
3 პეტრე ივანოვი 1 2
4 ნიკოლოზი პეტროვი 1 3
-- აირჩიეთ ყველა ჩანაწერი მომხმარებლების ცხრილიდან, რომლებსაც აქვთ ასო A მათ სახელში SELECT * FROM Users WHERE მომხმარებლის სახელი LIKE "%a%"
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
4 ნიკოლოზი პეტროვი 1 3
5 ნიკოლოზი ივანოვი 2 1
7 ანდრეი ბუკინი 2 2
-- აირჩიეთ ყველა ჩანაწერი მომხმარებლების ცხრილიდან, რომლებსაც აქვთ არა V ასო მათი მეგობრის სახელში SELECT * FROM Users WHERE მომხმარებლის სახელი LIKE "_[^v]%"

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

აირჩიეთ PositionID სვეტის ჩანაწერები პოზიციების ცხრილიდან, BaseSalary< 600 SELECT PositionID FROM Positions WHERE BaseSalary < 600 -- Выбрать все записи из таблицы Users, у кого имя Ivan или Andrey SELECT * FROM Users WHERE UserName IN ("Ivan", "Andrey")

შერჩევაში არსებული მონაცემების დასალაგებლად გამოიყენება ORDER BY ბრძანება და შემდეგ შეამოწმეთ, რომ ეს ბრძანება არ ახარისხებს ტექსტის, ntext და სურათის ტიპის მონაცემებს. ნაგულისხმევად, დახარისხება ხორციელდება ზომის მიხედვით, ამიტომ ASC პარამეტრი შეიძლება გამოტოვდეს ამ ტიპისთვის:

აირჩიეთ<названия колонок или *>FROM<название таблицы>სად<условие>შეკვეთა<названия колонок>

შედეგის მწკრივების რაოდენობის გაზრდის მიზნით, TOP ბრძანება იმარჯვებს:

აირჩიეთ TOP [სტრიქონების რაოდენობა]<названия колонок или *>FROM<название таблицы>სად<условие>შეკვეთა<названия колонок>

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

  • AVG(სვეტი) – სვეტის საშუალო მნიშვნელობა;
  • COUNT(სვეტი) – არა NULL ელემენტების რაოდენობა სვეტში;
  • COUNT(*) – პუნქტების რაოდენობა მოთხოვნაში;
  • MAX(სვეტი) – მაქსიმალური მნიშვნელობა სვეტში;
  • MIN(სვეტი) – მინიმალური მნიშვნელობა სვეტში;
  • SUM (სვეტი) - სვეტის მნიშვნელობების ჯამი.

გამოიყენეთ სხვადასხვა ORDER, TOP ბრძანებები და აგრეგაციის ფუნქციები:

აირჩიეთ მომხმარებლის სახელი სვეტის პირველი 3 უნიკალური ჩანაწერი მომხმარებლების ცხრილიდან, დალაგებული მომხმარებლის სახელის მიხედვით SELECT DISTINCT TOP 3 მომხმარებლის სახელი მომხმარებელთა ხელფასი ორგანიზაციაში SELECT * FROM Users WHERE PositionID IN (SELECT PositionID FROM Positions WHERE BaseSalary IN (SELECT MAXROM) პოზიციები))

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

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

გაარკვიეთ პრაქტიკოსების რაოდენობა კანის ჯგუფში (პრაქტიკოსთა ჯგუფები - iddil_identifier და დაალაგეთ ჩანაწერების რაოდენობა კანის ჯგუფში) SELECT DepartmentID, COUNT(UserID) AS "მომხმარებელთა რაოდენობა"

დეპარტამენტის IDმომხმარებელთა რაოდენობა
1 4
2 3
4 1

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

იპოვეთ პრაქტიკოსთა რაოდენობა პირველ ჯგუფში (პრაქტიკოსთა ჯგუფი - viddiliv-ის id-ის მიხედვით, გაანალიზეთ ჩანაწერების რაოდენობა კანის ჯგუფში - შეიტანეთ შედეგი viddil-ზე ნაკლები rіv id 1-ით) SELECTBY DepartmentID userID, COUNT users AV DepartmentID, COUNT "1 - ვიცი რაოდენობა pratsіvnikіv of Pevnyi Posada in კანის vіddіlі - (zgrupuvati pratsіvnikіv for іdentifіkatorom townsmen რომ vіddіlіv რომ - porahuvati რაოდენობა zapisіv in kozhnіy grupі) და takozh porahuvati - რაოდენობა pratsіvnikіv in კანის vіddіlі რომ zagalnu რაოდენობა pratsіvnikіv SELECT DepartmentID, PositionID , COUNT(მომხმარებლის ID) როგორც "მომხმარებელთა რაოდენობა" FROM მომხმარებლებს GROUP BY DepartmentID, PositionID WITH ROLLUP

დეპარტამენტის IDპოზიციის IDმომხმარებელთა რაოდენობა
1 1 1
1 2 2
1 3 1
1 NULL 4
2 1 1
2 2 1
2 3 1
2 NULL 3
4 1 1
4 NULL 1
NULL NULL 8

დაჯგუფების ბრძანება ასევე შეიძლება დაემატოს WITH CUBE ოპერატორს, რომელიც შემდგომ აყალიბებს დაჯგუფებული სვეტების ყველა კომბინაციას: თუ არის N სვეტი, მაშინ თქვენ გაქვთ 2^N კომბინაცია.

იცოდე რაოდენობა pratsіvnikіv of Pevnyi ჩადებული კანის vіddіlі - (zgrupuvati pratsіvnikіv for іdentifіkatorom townsmen რომ vіddіlіv i - porahuvati რაოდენობა zapisіv in kozhnіy grupі) და takozh porahuvati - რაოდენობა pratsіvnikіv განთავსების კანის ჩადებული, მეტი კანის vіddіlu რომ - zagalnu რაოდენობა pratsіvnikіv SELECT DepartmentID, PositionID , COUNT(მომხმარებლის ID) როგორც "მომხმარებელთა რაოდენობა" FROM მომხმარებლებს GROUP BY DepartmentID, PositionID WITH CUBE

დეპარტამენტის IDპოზიციის IDმომხმარებელთა რაოდენობა
1 1 1
1 2 2
1 3 1
1 NULL 4
2 1 1
2 2 1
2 3 1
2 NULL 3
4 1 1
4 NULL 1
NULL NULL 8
NULL 1 3
NULL 2 3
NULL 3 2

GROUPING აგრეგაციის ფუნქცია საშუალებას გაძლევთ განსაზღვროთ რომელი ჩანაწერი დაემატა ROLLUP და CUBE ბრძანებებს, რომელი ჩანაწერი იქნა აღებული მონაცემთა ველიდან.

იპოვეთ პრაქტიკოსების რაოდენობა კანის ჯგუფში (პრაქტიკოსთა ჯგუფები - ცვლადების იდენტიფიკატორი და განსაზღვრეთ ჩანაწერების რაოდენობა კანის ჯგუფში) - ასევე დაადგინეთ დამატებითი რიგები, რომლებიც არ არის ნაპოვნი გერლის მონაცემებში SELECT DepartmentID, COUNT " AS "დამატებული მწკრივი" FROM Users GROUP BY DepartmentID WITH ROLLUP

დეპარტამენტის IDმომხმარებელთა რაოდენობადამატებული მწკრივი
1 4 0
2 3 0
4 1 0
NULL 8 1

დაჯგუფების კიდევ ერთი ბრძანება, COMPUTE, საშუალებას გაძლევთ დააჯგუფოთ მონაცემები და აჩვენოთ ისინი სხვადასხვა ცხრილებში. ანუ GROUP BY ბრძანება ROLLUP და CUBE ოპერატორებით ამატებს ჯგუფურ მონაცემებს დამატებითი რიგების ცხრილში ვარსკვლავით, ხოლო COMPUTE ბრძანება აჯგუფებს მონაცემებს, აფართოებს ცხრილს ქვეცხრილების მწკრივად და ასევე ქმნის ქვეცხრილს ვარსკვლავებით. COMPUTE ბრძანების გაუქმება შესაძლებელია ორ რეჟიმში:

  • რამდენად მარტივია აგრეგაციის ფუნქცია მაგიდის გარშემო შედეგის გამოსატანად;
  • BY პარამეტრით, როგორც დაჯგუფების ბრძანება, რომელიც აფართოებს ცხრილს ქვეცხრილად

COMPUTE ბრძანება BY პარამეტრით შეიძლება მეტ-ნაკლებად გაერთიანდეს ORDER BY ბრძანებასთან და დახარისხების სვეტები იგივეა, რაც დაჯგუფების სვეტები.

შეიყვანეთ კომპანიის ანგარიშების ცხრილი და შეამოწმეთ მათი ნომერი SELECT * FROM Users COMPUTE COUNT(UserID)

მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
3 პეტრე ივანოვი 1 2
4 ნიკოლოზი პეტროვი 1 3
5 ნიკოლოზი ივანოვი 2 1
6 სერგეი სიდოროვი 2 3
7 ანდრეი ბუკინი 2 2
8 ვიქტორ რიბაკოვი 4 1
cnt
8
-- იპოვნეთ პრაქტიკოსების რაოდენობა კანის ჯგუფში (პრაქტიკოსთა ჯგუფი სახეობის ID-ის მიხედვით და დაალაგეთ ჩანაწერების რაოდენობა კანის ჯგუფში) SELECT * FROM Users ORDER BY
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
3 პეტრე ივანოვი 1 2
4 ნიკოლოზი პეტროვი 1 3
cnt
4
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
5 ნიკოლოზი ივანოვი 2 1
6 სერგეი სიდოროვი 2 3
7 ანდრეი ბუკინი 2 2
cnt
3
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
8 ვიქტორ რიბაკოვი 4 1
cnt
1

ზედნანი მაგიდა

ყველაზე მნიშვნელოვანი და აუცილებელი მოთხოვნები SQL-ში - ce მოთხოვნები ცხრილებისთვის, თუ შერჩევა აუცილებელია dzherel-ის რაოდენობის მიხედვით. ასე რომ, მოითხოვეთ დასაკეცი წერილობით, მაგრამ ასევე წერისთვის, ნამსხვრევები ხშირად ხედავენ პროგრამაში უკვე მომზადებულ შედეგს, რომელიც აღარ არის საკმარისი ეკრანზე გამოსატანად.

თქვენ შეგიძლიათ დააკავშიროთ ცხრილები SQL-ში ორი გზით: ვერტიკალურად და ჰორიზონტალურად.

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

იპოვეთ ყველა კორესპონდენტი სახელად ივანე და დააბრუნეთ შედეგი - მოთხოვნის შედეგი "იცოდე ყველა კორესპონდენტი მეტსახელად პეტროვი" - დუბლიკატი ჩანაწერები, ჩართეთ SELECT * FROM Users WHERE UserName = "Ivan"

მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
4 ნიკოლოზი პეტროვი 1 3
-- იცოდე ყველა კორესპონდენტი სახელად ივანი და დააბრუნე შედეგი -- შედეგი მოთხოვნიდან "იპოვე ყველა კორესპონდენტი სახელად პეტროვი" -- ჩანაწერების დუბლიკატი შენახვა SELECT * FROM Users WHERE UserName = "Ivan" UNION ALL SELECT * FROM Users WHERE მომხმარებლის გვარი = " Petrov"
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის ID
1 ივანე პეტროვი 1 1
2 ივანე სიდოროვი 1 2
1 ივანე პეტროვი 1 1
4 ნიკოლოზი პეტროვი 1 3

ჰორიზონტალურად z'ednannya zdіysnyuєtsya shlyah zcheplennya kіlkoh მაგიდები გასაღები სვეტების უკან. უმარტივეს ჰორიზონტალურ შეერთებას მოჰყვება INNER JOIN ბრძანების დახმარებით, როგორიცაა zchіplyuє ცხრილები, კლავიშთა ველის რიგების არჩევა, როგორც zustrіchaєtsya ორივე ცხრილში.

აირჩიეთ<названия колонок или *>FROM<таблица_1>INNER Join table_2 ON table_1.key_field = table_2.key_field

მარცხენა ცხრილის ყველა ველის დამოუკიდებლად შესამოწმებლად, ასევე მარჯვენა ცხრილის ჩანაწერების შესამოწმებლად, საჭიროა აირჩიოთ LEFT JOIN ბრძანება. ეს ბრძანება იღებს ქვედა ცხრილს, ირჩევს რიგებს მარცხენა ცხრილიდან და აბრუნებს დღიურ მონაცემებს მარჯვენა ცხრილიდან NULL მნიშვნელობებში.

აირჩიეთ<названия колонок или *>FROM<таблица_1>LEFT Join table_2 ON table_1.key_field = table_2.key_field

RIGHT JOIN ბრძანება წინას მსგავსია, განსხვავება მხოლოდ იმაშია, რომ ქვედა ცხრილი ირჩევს ყველა სტრიქონს მარჯვენა ცხრილიდან, ხოლო მარცხენა ცხრილის ყოველდღიური მონაცემები ივსება NULL მნიშვნელობებით.

აირჩიეთ<названия колонок или *>FROM<таблица_1>RIGHT Join table_2 ON table_1.key_field = table_2.key_field

FULL JOIN ბრძანება თავისთავად გამოიყენება შესაერთებლად, ამიტომ ის არ შეუერთდება ცხრილებს, არ აირჩევს რიგებს ორივე ცხრილიდან და არ დააბრუნებს დღიურ მონაცემებს NULL მნიშვნელობებში.

აირჩიეთ<названия колонок или *>FROM<таблица_1>FULL Join table_2 ON table_1.key_field = table_2.key_field

დანარჩენმა გუნდმა, რომელიც იშვიათად იმარჯვებს, შექმნა CROSS JOIN ცხრილი. ეს ბრძანება ბეჭდავს ცხრილებს სხვა საკვანძო ველის გარეშე და შედეგი არის გამომავალი ცხრილების სხვადასხვა რიგების იგივე კომბინაცია.

აირჩიეთ<названия колонок или *>FROM<таблица_1>CROSS JOIN ცხრილი_2

შეერთება არ შემოიფარგლება ორზე მეტი ცხრილით, მას ასევე შეუძლია მიიღოს რამდენიმე JOIN ბრძანება, რაც უფრო მოსახერხებელია საბოლოო zvіtіv-ის ფორმირებისთვის. ქვემოთ მოცემულია ცხრილის ყველა ბრძანების მაგალითი.

SELECT * FROM მომხმარებლებიდან INNER Join Departments ON Users.DepartmentID = Departments.DepartmentID

მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის IDდეპარტამენტის IDᲓეპარტამენტის სახელწოდება
1 ივანე პეტროვი 1 1 1 წარმოება
2 ივანე სიდოროვი 1 2 1 წარმოება
3 პეტრე ივანოვი 1 2 1 წარმოება
4 ნიკოლოზი პეტროვი 1 3 1 წარმოება
5 ნიკოლოზი ივანოვი 2 1 2 განაწილება
6 სერგეი სიდოროვი 2 3 2 განაწილება
7 ანდრეი ბუკინი 2 2 2 განაწილება
SELECT * FROM Users LEFT JOIN Departments ON Users.DepartmentID = Departments.DepartmentID
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის IDდეპარტამენტის IDᲓეპარტამენტის სახელწოდება
1 ივანე პეტროვი 1 1 1 წარმოება
2 ივანე სიდოროვი 1 2 1 წარმოება
3 პეტრე ივანოვი 1 2 1 წარმოება
4 ნიკოლოზი პეტროვი 1 3 1 წარმოება
5 ნიკოლოზი ივანოვი 2 1 2 განაწილება
6 სერგეი სიდოროვი 2 3 2 განაწილება
7 ანდრეი ბუკინი 2 2 2 განაწილება
8 ვიქტორ რიბაკოვი 4 1 NULL NULL
SELECT * FROM მომხმარებლებს RIGHT JOIN Departments ON Users.DepartmentID = Departments.DepartmentID
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის IDდეპარტამენტის IDᲓეპარტამენტის სახელწოდება
1 ივანე პეტროვი 1 1 1 წარმოება
2 ივანე სიდოროვი 1 2 1 წარმოება
3 პეტრე ივანოვი 1 2 1 წარმოება
4 ნიკოლოზი პეტროვი 1 3 1 წარმოება
5 ნიკოლოზი ივანოვი 2 1 2 განაწილება
6 სერგეი სიდოროვი 2 3 2 განაწილება
7 ანდრეი ბუკინი 2 2 2 განაწილება
NULL NULL NULL NULL NULL 3 შესყიდვა
SELECT * FROM მომხმარებლებს FULL Join Departments ON Users.DepartmentID = Departments.DepartmentID
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის IDდეპარტამენტის IDᲓეპარტამენტის სახელწოდება
1 ივანე პეტროვი 1 1 1 წარმოება
2 ივანე სიდოროვი 1 2 1 წარმოება
3 პეტრე ივანოვი 1 2 1 წარმოება
4 ნიკოლოზი პეტროვი 1 3 1 წარმოება
5 ნიკოლოზი ივანოვი 2 1 2 განაწილება
6 სერგეი სიდოროვი 2 3 2 განაწილება
7 ანდრეი ბუკინი 2 2 2 განაწილება
NULL NULL NULL NULL NULL 3 შესყიდვა
8 ვიქტორ რიბაკოვი 4 1 NULL NULL
აირჩიეთ * მომხმარებლებისგან CROSS Join დეპარტამენტები
მომხმარებლის იდენტიფიკაციამომხმარებლის სახელიმომხმარებლის გვარიდეპარტამენტის IDპოზიციის IDდეპარტამენტის IDᲓეპარტამენტის სახელწოდება
1 ივანე პეტროვი 1 1 1 წარმოება
2 ივანე სიდოროვი 1 2 1 წარმოება
3 პეტრე ივანოვი 1 2 1 წარმოება
4 ნიკოლოზი პეტროვი 1 3 1 წარმოება
5 ნიკოლოზი ივანოვი 2 1 1 წარმოება
6 სერგეი სიდოროვი 2 3 1 წარმოება
7 ანდრეი ბუკინი 2 2 1 წარმოება
8 ვიქტორ რიბაკოვი 4 1 1 წარმოება
1 ივანე პეტროვი 1 1 2 განაწილება
2 ივანე სიდოროვი 1 2 2 განაწილება
3 პეტრე ივანოვი 1 2 2 განაწილება
4 ნიკოლოზი პეტროვი 1 3 2 განაწილება
5 ნიკოლოზი ივანოვი 2 1 2 განაწილება
6 სერგეი სიდოროვი 2 3 2 განაწილება
7 ანდრეი ბუკინი 2 2 2 განაწილება
8 ვიქტორ რიბაკოვი 4 1 2 განაწილება
1 ივანე პეტროვი 1 1 3 შესყიდვა
2 ივანე სიდოროვი 1 2 3 შესყიდვა
3 პეტრე ივანოვი 1 2 3 შესყიდვა
4 ნიკოლოზი პეტროვი 1 3 3 შესყიდვა
5 ნიკოლოზი ივანოვი 2 1 3 შესყიდვა
6 სერგეი სიდოროვი 2 3 3 შესყიდვა
7 ანდრეი ბუკინი 2 2 3 შესყიდვა
8 ვიქტორ რიბაკოვი 4 1 3 შესყიდვა
SELECT dpt.DepartmentName AS "Department", usr.UserName + " " + usr.UserSurname AS "User name", pos.PositionName AS "Position" FROM Users AS usr LEFT JOIN დეპარტამენტები AS dpt ON usr.DepartLEFTIDd. შეუერთდით პოზიციებს AS pos ON usr.PositionID = pos.PositionID ORDER BY dpt.DepartmentID, pos.PositionID
დეპარტამენტიმომხმარებლის სახელითანამდებობა
NULL ვიქტორ რიბაკოვი მენეჯერი
წარმოება ივან პეტროვი მენეჯერი
წარმოება ივან სიდოროვი უფროსი ანალიტიკოსი
წარმოება პეტრ ივანოვი უფროსი ანალიტიკოსი
წარმოება ნიკოლაი პეტროვი ანალიტიკოსი
განაწილება ნიკოლაი ივანოვი მენეჯერი
განაწილება ანდრეი ბუკინი უფროსი ანალიტიკოსი
განაწილება სერგეი სიდოროვი ანალიტიკოსი

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

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

Transact-SQL ტრანზაქციებზე გადის BEGIN TRANSACTION ... COMMIT TRANSACTION სტრუქტურა. Tsyu სტრუქტურა vikoristovuvat neobov'yazkovo, მაგრამ შემდეგ სცენარის ყველა ბრძანება შეუქცევადია, ამიტომ შეუძლებელია მუშაობა ფრონტზე. ტრანზაქციის ბლოკის სტრუქტურა იგივეა:

ტრანზაქციის დაწყება [ჩემი ტრანზაქცია] [ოპერაცია] ტრანზაქციის დადება [ჩემი ტრანზაქცია] ან ტრანზაქციის დაბრუნება [ჩემი ტრანზაქცია]

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

დააწესეთ ახალი ხელფასი ყველა მუშაკისთვის BEGIN TRANSACTION TR1 განახლება პოზიციების SET BaseSalary = 2500000000000000 IF @@ERROR<>0 BEGIN RAISERROR("შეცდომა, ტრანზაქცია არ დასრულებულა!",16,-1) ROLLBACK TRANSACTION TR1 END ELSE COMIT TRANSACTION TR1

SQL სერვერის ცხრილში მონაცემების ჩასართავად გამოიყენება INSERT INTO ბრძანება:

INSERT INTO [ცხრილის სახელი] (სვეტები) VALUES ([სვეტის მნიშვნელობები])

ბრძანების კიდევ ერთი ნაწილი არის neobov'yazkovoy MS SQL Server 2003-ისთვის, მაგრამ MS JET SQL ერთი სიტყვის გარეშე აპატიებს სინტაქსს. ჩასმა უნდა განხორციელდეს რიგებში, ისე, რომ ცხრილების ყველა სვეტი და მნიშვნელობები მითითებული იყოს ოთახში, რადგან მათში აუცილებელია მათი შეყვანა. თუ სვეტს შეიძლება ჰქონდეს მნიშვნელობა დახურვის უკან, ან თუ ის იძლევა ცარიელი მნიშვნელობას, მაშინ ჩასმის ბრძანებაში ეს სვეტი შეიძლება გამოტოვდეს. INSERT INTO ბრძანება ასევე გაძლევთ საშუალებას მიუთითოთ მონაცემების ჩასმა სვეტების თანმიმდევრობით, მაგრამ ამავე დროს აუცილებელია სვეტების რიგის მითითება.

მომხმარებლების ცხრილში ჩასვით მწკრივი მონაცემებით UserID = 9, UserName = "Nikolay", -- UserSurname = "Gryzlov", DepartmentID = 4, PositionID = 2. INSERT INTO Users VALUES (9, "Nikolay", "Gryzlov" , 4, 2) -- მომხმარებელთა ცხრილში ჩასვით მწკრივი მონაცემებით UserID = 10, UserName = "Nikolay", -- UserSurname = "Kozin", DepartmentID - სარეკლამო ღირებულება, PositionID - არ არის მითითებული. INSERT Users VALUES (10, "Nikolay", "Kozin", DEFAULT, NULL) -- მომხმარებელთა ცხრილში ჩასვით მწკრივი მონაცემებით UserName = "Angrey", UserSurname = "Medvedev", -- UserID = 11, სხვა მნიშვნელობები მომხმარებლისთვის INSERT INTO (მომხმარებლის სახელი, მომხმარებლის გვარი, მომხმარებლის ID) ღირებულებები ("Angrey", "Medvedev", 11)

ცხრილის ცხრილის მნიშვნელობების შესაცვლელად გამოიყენება UPDATE ბრძანება:

განაახლეთ [ცხრილის სახელი] SET [სვეტის სახელი]=[სვეტის მნიშვნელობა] WHERE [um]

ცხრილის მნიშვნელობის განახლება (შეცვლა) შეიძლება განხორციელდეს გიჟურად, გონებით ან სხვა ცხრილიდან მონაცემების შერჩევით.

დააყენეთ 2000 ერთეული ხელფასი ყველა პოსადზე. განაახლეთ პოზიციები SET BaseSalary = 2000 -- Posads-ით id 1 დაადგინეთ ხელფასი 2500 ერთეულზე. განაახლეთ პოზიციები SET BaseSalary = 2500 WHERE PositionID = 1 -- Posad id 2-ით ხელფასს 30%-ით შეცვლის. განაახლეთ თანამდებობები SET BaseSalary = BaseSalary * 0.7 WHERE PositionID = 2 -- დააყენეთ ყველა პოზადისთვის ჯანსაღი ხელფასი (30000 დამატება ყოველ რიცხვზე -- თანამშრომლების სიებში) ) მომხმარებლებისგან)

მონაცემთა ხედვა დაყენებულია DELETE ბრძანებით:

წაშლა [მაგიდის სახელი] WHERE [umova]

Vydalennya danikh მოვუწოდებთ ნახოთ გარკვეული კრიტერიუმი. ვინაიდან მონაცემთა ამოღება აუცილებელია არაუსაფრთხო ოპერაციის დასასრულებლად, მაშინ ასეთი ბრძანების დაწყებამდე უმჯობესია შექმნათ სატესტო შერჩევა SELECT ბრძანებით, თითქოს ამ მონაცემების შედეგი ნახეთ, ისინი წაიშლება. რამდენიც გჭირდებათ, თამამად შეგიძლიათ შეცვალოთ SELECT DELETE-ით და წაშალოთ მონაცემები.

საკონტროლო სიის ხილვადობა იდენტიფიკატორით 10 -- განახლების რეჟიმში, რეკომენდირებულია გამოიყენოთ SELECT ბრძანება, -- იმის გასაგებად, წაიშლება თუ არა მონაცემები: -- აირჩიეთ მომხმარებლის ID მომხმარებლებიდან WHERE მომხმარებლის ID = 10 DELETE FROM მომხმარებლები WHERE მომხმარებლის ID = 10 -- მომხმარებლის ყველა ველის ნახვა Users FROM Users-ში INNER Join Departments ON Users.DepartmentID = Departments.DepartmentID WHERE Departments.DepartmentName = "Production" -- ყველა შედეგის ნახვა DELETE FROM მომხმარებლებისგან

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

ცხრილების გასუფთავების საუკეთესო ბრძანება არის TRUNCATE TABLE.

TRUNCATE TABLE [მაგიდის სახელი]

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

წაშალეთ მომხმარებლების ცხრილი TRUNCATE TABLE მომხმარებლები

Transact-SQL იძლევა საათის ცხრილების დაწერის საშუალებას, რათა ცხრილები იქმნება სერვერის მეხსიერებაში ერთი საათის განმავლობაში მონაცემთა ბაზასთან მუშაობისთვის. დროის ცხრილები შეიძლება იყოს im'ya მსგავსი, მაგრამ დაადანაშაულეთ სიმბოლო #.

შექმენით დროის ცხრილი #TempTable, დააკოპირეთ და ჩასვით - ცხრილის UserName სვეტები Users SELECT UserName INTO #TempTable FROM მომხმარებლები - აირჩიეთ დროის ცხრილის ყველა ჩანაწერი #TempTable SELECT *

პროცედურების და ფუნქციების შენახვა

პროცედურები და ფუნქციები ინახება SQL-ოპერატორების კომპლექტით, რომელთა შენახვა შესაძლებელია სერვერზე. თუ სკრიპტი შენახულია სერვერზე, მაშინ კლიენტებს არ მოუწევთ ხელახლა დააყენონ იგივე okrem ოპერატორები, სუნი შეიძლება დაუბრუნდეს შენახულ პროცედურას. სიტუაციები, თუ პროცედურების თავიდან აცილება, განსაკუთრებით რთულია:

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

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

ხელფასის განახლების ფუნქცია შექმნილია CREATE PROCEDURE usp_UpdateSalary AS UPDATE Positions SET BaseSalary = 2000 GO -- შექმნილია ხელფასის განახლების ფუნქცია CREATE FUNCTION usf_GetName (@UserID int) RETURNS varchar(255) + "" + მომხმარებლის გვარი WHEUserIDEX) ხელფასის განახლება TestDatabase.dbo.usp_UpdateSalary -- შეცვალეთ თანამშრომლის სახელი id 2-ით SELECT TestDatabase.dbo.usf_GetName(2)

ისევ და ისევ, პროცედურები და ფუნქციები, რომლებზეც ზრუნავენ, უპირატესობას ანიჭებენ:

  • პროდუქტიულობა;
  • zagalna ლოგიკა ყველა zapitіv;
  • მოძრაობის ცვლილება;
  • უსაფრთხოება - კორისტუვაჩოვზე წვდომა მოცემულია არა მაგიდაზე, არამედ პროცედურაზე;

პროდუქტიულობა

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

  • UNICATE NOT - ჩამონათვალის ბრძანებები არჩეულია რამდენიმე ნაბიჯით, რაც ზრდის ტრაფიკს სერვერზე.
  • Unicate LIKE - ეს ოპერატორი არის შესატყვისი ოპერატორი მრავალი შესატყვისი შაბლონისთვის, ქვედა ოპერატორი არის = ფილტრაციის საჭირო ნაბიჯების რაოდენობის შესამცირებლად.
  • Zastosovuvaty ზუსტი შაბლონები pokuku - zastosuvannya symbol_v pіdstanovki zbіlshuє საათის vykonannya zapotu, რომ reverbіkіv sіh variantіv_іnіpіnіtіn_іnієіі სჭირდება სერვერის დამატებითი რესურსები.
  • Unique ORDER - დახარისხების ბრძანება საშუალებას გაძლევთ დაალაგოთ ცხრილის რიგები ზედიზედ, რაც ხელს შეუშლის შედეგს.

ვიტალი ბოჩკაროვი

T-SQL ენა აღიარებულია მონაცემთა ნაკრების მართვისთვის. დანაშაულის მიზეზების გამო, არ არსებობს ტრადიციული ენების დამახასიათებელი ნიშნები, რომლებიც აუცილებელია პროგრამირების დანამატებისთვის. ვინაიდან დიდი ხანია მუშაობთ დანამატების შექმნაზე, მაშინ, იმღერე-სიმღერე, ეწინააღმდეგები T-SQL და სხვა ენებზე დაპროგრამების იდეას, როგორიცაა VB, C# და Java.

T-SQL პაკეტები

ერთ T-SQL ინსტრუქციას ეწოდება მოთხოვნა, ხოლო მათ კომპლექტს ეწოდება პაკეტი. პაკეტის ინსტრუქციების მთელი თანმიმდევრობა ანაცვლებს სერვერს კლიენტის პროგრამებიდან, როგორც ერთი ერთეული.

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

პაკეტის ხელახლა დათვალიერება

SQL სკრიპტის ფაილი და შეკითხვის ანალიზატორის ფანჯარა შეიძლება შეიცავდეს რამდენიმე პაკეტს. ზოგჯერ, ყველა პაკეტი ამატებს ტერმინატორების საკვანძო სიტყვებს. იყიდება zamovchuvannyam tsim საკვანძო სიტყვა є GO, და შეიძლება იყოს buti გაერთიანებული ზედიზედ. ყველა სხვა სიმბოლო (ნავიტის კომენტარები) ანეიტრალებს პაკეტის დისტრიბუტორს.

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

DDL ინსტრუქციები

ზოგიერთი DDL mov T-SQL განცხადება, როგორიცაა Create Procedure, არის პირველი ინსტრუქციები პაკეტში. ძველი სცენარებიც კი, რომლებიც ქმნიან უპიროვნო ობიექტებს, ხშირად მოითხოვს ბევრი შეფუთვის შეფუთვას. SQL Server oskіlki okremo აანალიზებს სინტაქსს პაკეტების უკან, უპიროვნო დისტრიბუტორების ასეთი არსებობა ხელს უწყობს შეწყალების ლოკალიზაციას.

მონაცემთა ბაზებს შორის გადართვა

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

მომგებიანი პაკეტები

პაკეტის გამოყენება შესაძლებელია რამდენიმე გზით.

ზოგადად SQL სკრიპტს (ისე, რომ ყველა პაკეტს, რომელიც შედის ახალზე) შეიძლება მიჰყვეს ფაილის გზას. sql მართვის სტუდიის SQL რედაქტორში და კლავიშების დაჭერით (ან ღილაკზე დაჭერით! შეასრულეთ ინსტრუმენტთა ზოლი, ან შეკითხვის 1 ^Execute ელემენტის არჩევით მენიუში). (მე დავაყენე ჩემი Windows ოპერაციული სისტემა ისე, რომ როდესაც დავაწკაპუნებ ფაილზე. SQL, შეკითხვის მთელი ანალიზატორი ავტომატურად იწყება.)

SQL რედაქტორი მენეჯმენტ სტუდიაში ასევე შეიძლება გამოყენებულ იქნას როგორც SQL განცხადება. ვისთვისაც აუცილებელია ღილაკის დანახვა და დაჭერა (ან დააწკაპუნეთ ღილაკზე Execute ინსტრუმენტთა პანელზე ან აირჩიეთ Query 1 ^Execute ელემენტი მენიუში).

პროგრამის პაკეტი T-SQL შეიძლება გამოყენებულ იქნას ADO ან ODBC-ის დასახმარებლად.

T-SQL სკრიპტის შესახებ თქვენ ასევე შეგიძლიათ მოძებნოთ SQLCmd ბრძანების ხაზის დამატებითი პროგრამა ფაილის სახელის გადასაცემად. SQL yak პარამეტრი.

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

დამატებითი ინფორმაცია SQLCmd utility div. მე-6 ფილიალში, რომელიც ეძღვნება მენეჯმენტ სტუდიას.

ინფორმაცია

Vikonannya პროცედურები, რომლებიც მიღებულია

SQL პაკეტისთვის შენახული პროცედურა ეწოდება exec საკვანძო სიტყვის დახმარებით. ვინ უნდა დაიცვას დაბალი წესები. Oskіlki razrivi ryadkіv SQL Server-ისთვის აზრი არ აქვს, exec ბრძანება ნიშნავს წინა ინსტრუქციების დასასრულს.

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

სისტემის პროცედურის შემდეგი ორი ვიკი, რომელიც არჩეულია, აჩვენებს პაკეტში ალტერნატიულ exec ბრძანებებს:

EXEC sp_help;

ვისზეც დავყავით, ჩვენ შევხედეთ მხოლოდ ყოფილთა სხვა ბრძანებას პაკეტზე. საკვანძო სიტყვის yeshes შემქმნელის შესახებ ინფორმაციას შევატყობინებ "Dynamic SQL" განყოფილებაში.

ფორმატირება T-SQL-ში

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

სრული ინსტრუქციები

ANSI SQL სტანდარტი მოითხოვს კანის ინსტრუქციებში dot-to-coma-ს გამოყენებას. ამავე დროს, როდესაც პროგრამირების T-SQL ენაზე, წერტილი, რომელთანაც არ არის obov'azkova. ვინ უნდა დაიცვას კილკომის წესები.

არ განათავსოთ її try end განაცხადის შემდეგ.

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

მოათავსეთ obov'yazkovo її CTE-ის სითბოს ცხრილის ლექსების შემდეგ.

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

Prodovzhennya rowkіv

ინსტრუქციები T-SQL, თავისი ბუნებით, შეიძლება იყოს ძლიერი. Deyakі zapitami დარჩენილი rasdіlu s chislennym ob'ednannymi და pіdzapitami იკავებს მთელ მხარეს. განსაკუთრებით მიზანშეწონილია, რომ T-SQL იგნორირებას უკეთებს სივრცის სიმბოლოებს მწკრივის ბოლოში. Tse ნიშნავს, რომ ამჟამინდელი ინსტრუქცია შეიძლება შესრულდეს შეტევითი რიგის გარეშე რაიმე განსაკუთრებული სიმბოლოს საჭიროების გარეშე. ეს ძალა საშუალებას აძლევს მნიშვნელოვან სამყაროს გადაიტანოს პროგრამის კოდის კითხვა.

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

კომენტარები

T-SQL ენა შეიძლება გამოყენებულ იქნას კომენტარების ერთ პაკეტში ორ სტილში: ANCI და გადაადგილება C. პირველი იწყება ორი დეფისით და მთავრდება ხაზის ბოლოს:

- კომენტარი ANSI სტილზე

ასევე, ANSI სტილის კომენტარები შეიძლება იყოს ჩასმული ინსტრუქციების რიგის მსგავსად:

აირჩიეთ FirstName, LastName - სვეტები FROM Persons, რომლებიც არჩეულია - გამომავალი ცხრილი

სადაც გვარი მოსწონს 'Hal%'; - რიგებად გაფორმებული

SQL რედაქტორს შეუძლია გაყინოს და ნახოს კომენტარები ყველა ნანახ მწკრივზე. რისთვისაც თქვენ უნდა აირჩიოთ მენიუს ბრძანება Edit^Advanced^Comment Out ( ან ) ან შეცვალეთ ^ გაფართოებული 1 ^ კომენტარების წაშლა ( ან ).

C ფილმის სტილზე კომენტარები იწყება ირიბი ნახატებით და პატარა ვარსკვლავებით (/*) და მთავრდება იგივე სიმბოლოებით შემობრუნების თანმიმდევრობით. ამ ტიპის კომენტარი უფრო სავარაუდოა, რომ გამოყენებული იქნება მწკრივების ბლოკების კომენტარებისთვის, როგორიცაა სათაურებიდან ან დიდი ტესტის მოთხოვნებიდან. /*

ცხრილის ჩასმა ტრიგერის ორდერი პოლ ნილსენი

C სტილში კომენტარების ერთ-ერთი მთავარი მახასიათებელია ის, რაც მათში კომენტარის გარეშე შეიძლება ჩაიწეროს.

T-SQL პერსონალიზაცია

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

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

SQL Server წარმოთქვამს ბრძანებებს, რათა გაუადვილოს პაკეტების განახლება. Zocrema, ბეჭდვის ბრძანება აჭარბებს განახლებას მონაცემთა შედეგის ნაკრების შექმნის გარეშე. კერძოდ, მე პატივს ვცემ ბეჭდვის ბრძანებას, როგორც განსაკუთრებით ღირებული პაკეტის გამართვისთვის. თუ დენის ანალიზატორი გადადის ქსელის რეჟიმში, აირჩიეთ შემდეგი პაკეტი:

მიღებული მონაცემების ნაკრები ჩნდება მაგიდაზე და იკეცება ერთ რიგში. ამავდროულად, შეტყობინებების ჩანართი აჩვენებს შემდეგ შედეგს:

(დაზარალდა 1 მწკრივი)

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

ბეჭდვა 1 Cob";

დაგვიანების მოლოდინი *00:00:02′;

ბეჭდვა 'Kіnets 1;

vikonanny კოდის შედეგი:

მთავარია ის, რომ მენეჯმენტის სტუდიის ვერსიაში SQL New in Server 2005 არ შეიცავს T-SQL ძრავას, რომელიც იმყოფება პაკეტში.

2005 Visual Studio 2005 წელი

განახლება, ამის შესახებ საიტზე www. SQLServerBible. com.

ცვლილებები

Be-yak mov vimagaє for timchasovogo zberezhennya მნიშვნელობა zminnykh-ის მეხსიერებაში. T-SQL-ში ცვლილებები იქმნება დამატებითი declare ბრძანების შემდეგ, რასაც მოჰყვება მათი ცვლილება და ტიპი. სხვადასხვა ტიპის მონაცემების მოგება ზუსტად ემთხვევა ცხრილებში მოცემულ მოგებებს. რომელსაც შეგიძლიათ დაამატოთ ცხრილის ტიპი და SQLVariant ტიპი. ერთ ბრძანებაში გამოაცხადეთ, ვისი მეშვეობით შეიძლება გამოისყიდოს დეკილკა ცვლილება.

მნიშვნელობა ცვლილებებისთვის განკუთვნილი ტერიტორიის ჩაკეტვისთვის

ცვლილებების ფარგლები (ეს არის ადამიანის სიცოცხლის ტერმინი) ფართოვდება მხოლოდ ნაკადის პაკეტისთვის. ცვლილების შექმნის ჩაკეტვისთვის, ცარიელი მნიშვნელობები null და დამნაშავე buti ინიციალიზაციის დარღვევის ჩართვამდე ამოღებულია.

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

გამოაცხადეთ @Test INT,

@TestTwo NVARCHAR(25);

SELECT @ Test, @ Test Two;

SET @TestTwo = 'მნიშვნელობა';

SELECT @ Test, @ Test Two ;

აირჩიეთ @Test როგორც BatchTwo, @TestTwo;

(დაზარალდა 1 მწკრივი)

1 ღირებულება

(დაზარალდა 1 მწკრივი)

Msg 137, დონე 15, მდგომარეობა 2, ხაზი 2 უნდა გამოაცხადოს სკალარული ცვლადი „@Test“.

პირველი SELECT განცხადება აბრუნებს ორ ცარიელ მნიშვნელობას. ამის შემდეგ, ცვლილებების ინიციალიზაციისას, სუნი აქცევს მინიჭებულ მნიშვნელობებს. როდესაც პაკეტი სრულდება SELECT ინსტრუქციის წინსვლის შედეგად, შეწყალების #137 ეცნობება.

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

კომპლექტის და არჩევის ბრძანებების ვარიანტი

SET და SELECT ბრძანებები შეიძლება გამოყენებულ იქნას ცვლილებებისთვის მნიშვნელობების მინიჭებისთვის. მათ შორის მთავარი განსხვავება ისაა, რომ SELECT ბრძანებას შეუძლია მონაცემთა ბაზიდან ინფორმაციის ამოღება (როგორიცაა ცხრილები, მონაცემები, მონაცემები და ა.შ.) და შეიცავდეს სხვა SELECT ინსტრუქციებს, ხოლო SET ბრძანებას აკრავს ვირუსების მონაცემები. მოსწონს ერთი, ასე რომ სხვა გუნდს შეუძლია შეცვალოს ფუნქცია. გამოიყენეთ SET ბრძანება, თუ გჭირდებათ ფუნქციისთვის ცვლადი შედეგის მინიჭება, ან მუდმივი და არ გჭირდებათ მონაცემების ნახვა.

SELECT განცხადებას შეუძლია მიიღოს მნიშვნელობები მრავალი ჩანაწერიდან. კანის დაზიანებების მნიშვნელობა შეიძლება მიენიჭოს ცვლილებას. როდესაც SELECT განცხადება მოძრაობს რიგების მწკრივს, იცვლება დარჩენილი რიგების მნიშვნელობები. SELECT ინსტრუქცია მოდის 32 სტრიქონში, ინდივიდუალური იდენტიფიკატორის ველის მიხედვით. იმავე საათში, კოდი იცვლება და სახელი აღარ არის სიაში არსებული დანარჩენი ხალხი:

გამოაცხადეთ ©TempID INT,

@TempLastName VARCHAR(25);

SET@TempID=99;

@TempID=PersonID,

@TempLastName = გვარი

შეკვეთა პირის ID-ით;

vikonannya პაკეტის შედეგი:

32 @code rest:Campbell

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

თუ SELECT განცხადება არ აბრუნებს იმავე რიგს, მაშინ ის არ იცვლება. შემდეგი მოთხოვნა არ აბრუნებს მნიშვნელობას, ჩანაწერები 100 იდენტიფიკატორით არ არსებობს პირის ცხრილში. @TempIDvariable-ის შეცვლის მიზეზების გამო, ვიმედოვნებთ, რომ დარჩენილი არსებითი მწკრივის მნიშვნელობა, პრიორიტეტის შეცვლისას, ვიღებთ ცარიელ მნიშვნელობას:

გამოაცხადეთ @TempID INT,

@TempLastName VARCHAR(25);

SET@TempID=99;

აირჩიეთ @TempID = პიროვნების ID,

@TempLastName = გვარი FROM Person WHERE PersonID = 100 ORDER BY PersonID;

აირჩიეთ @TempID, @TempLastName;

99 @code last: NULL

Umovny vіdbіr

შემდეგი SELECT განცხადება არის WHERE წინადადების ჩანაცვლება და სინტაქსი სწორია, თუმცა შეიძლება მათთვის გაუგებარი ჩანდეს:

SELECT @ change = viraz WHERE boolean_viraz;

ზოგჯერ, WHERE პუნქტი ფუნქციონირებს როგორც ჭკვიანი if განცხადება. თუ ლოგიკური არის true, მაშინ მნიშვნელობა ენიჭება ცვლილებას, წინააღმდეგ შემთხვევაში SELECT განცხადება კვლავ დაყენებულია, მაგრამ ცვლილების მნიშვნელობა არ იცვლება.

SQL შეკითხვებში ცვლილებების ვარიანტი

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

Skrіz, de zapі შეუძლია გამარჯვებული viraz, შეუძლია გაიმარჯვოს და შეიცვალოს. საფეხურზე, ცვლილების ჩანაცვლება ნაჩვენები იყო წინადადებაში WHERE: გამოიყენეთ OBXKites;

გამოაცხადეთ @ProductCode CHAR(10);

SET @Code = '1001';

აირჩიეთ პროდუქტის სახელი პროდუქტიდან

WHERE კოდი = @ProductCode;

შედეგი უარყოფილი იქნება:

Basic Box Kite 21 ინჩი

ცვლილებები მრავალჯერადი დავალებით

ცვლილებები მრავალჯერადი დავალებით - ეს არის მტრული მეთოდი, რომელიც საშუალებას გაძლევთ დაამატოთ ცვლილება საკუთარ თავს დამატებითი SELECT ინსტრუქციებისთვის და დაქვემდებარებული.

ვისთვისაც ნაჩვენები იქნება აპლიკაციების მცირე რაოდენობა რეალური ცხოვრებიდან. თუმცა, სიმარტივისთვის, SELECT განცხადება, ნება მომეცით წარმოგიდგინოთ ძირითადი ფორმა:

აირჩიეთ @ ცვლილება = @ ცვლილება + დ. stowpet FROM(kerowan_table) როგორც d;

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

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

Outer Banks Lighthouses ტურის თარიღების სია შექმნილია შემტევი კონდახზე, რომელიც ნაჩვენებია Cape Hatter-ის მთავარ მონაცემთა ბაზაში, როგორც სარეკლამო საწარმოები:

@EventDates VARCHAR(1024);

SET @EventDates = '';

აირჩიეთ ©EventDates = @EventDates + CONVERT(VARCHAR(15), a.d,107) + '

FROM (აირჩიეთ დაწყების თარიღი, როგორც [d] ღონისძიების შეერთების ტურში

Event.TourID = Tour.TourlD WHERE ტური. = 'გარე ბანკების შუქურები') როგორც a;

აირჩიეთ მარცხნივ(@EventDates, Len(@EventDates)-1)

AS "გარე ბანკების შუქურების ღონისძიებები";

vikonannya პაკეტის შედეგი:

Outer Banks Lighthouse ღონისძიებები

რიცხვების რიცხვითი დავალებით შეცვლის პრობლემა ის არის, რომ დენორმალიზებული მონაცემების სწორი თანმიმდევრობა გარანტირებულია. ვინაიდან არადოკუმენტაციის ეს მეთოდი ხრიკს ჰგავს, თქვენ ვერ დაიკვეხნით SQL Server-ის სრული ბრწყინვალებით. Prote vin შეიძლება იყოს ნაჩვენები, როგორც წითელი დროშა დღის დანიშვნების აღსანიშნავად (მე ვხედავ კურსორის გადაფარვას).

Leran2002 2015 წლის 9 აპრილი 12:31 საათზე

მოსწავლემ ისწავლოს SQL (DDL, DML) MS SQL Server-ის დიალექტის გამოყენებით. ქორჭილას ნაწილი

  • SQL,
  • Microsoft SQL სერვერი
  • სახელმძღვანელო

რაც შეეხება ამ თანაშემწეს

Tsey podruchnik є shchos on kshtalt "ჩემი მეხსიერების შტამპზე" z mov SQL (DDL, DML), tobto. ეს ინფორმაცია, როგორც ის დაგროვდა პროფესიული საქმიანობის პროცესში, მუდმივად გროვდება ჩემს თავში. Tse ჩემთვის არის საკმარისი მინიმუმი, რაც ყველაზე გავრცელებულია მონაცემთა ბაზებთან მუშაობისას. მეტი ახალი SQL კონსტრუქტების გამოქვეყნების საჭიროების გამო, მე მოვუწოდებ დახმარებას MSDN ბიბლიოთეკაში და ვდებ მას ინტერნეტში. ჩემი აზრით, აიღე ყველაფერი შენს თავში საკმაოდ შეუფერხებლად, ამას განსაკუთრებით ბევრი არ სჭირდება. ალე იცოდე მთავარი კონსტრუქციები კიდევ უკეთესია, რადგან სუნი zastosovnі პრაქტიკულად ისეთ მდიდარ ურთიერთობით მონაცემთა ბაზებში, როგორიცაა Oracle, MySQL, Firebird. Vidminnosti ძირითადად დაკავშირებულია მონაცემთა ტიპებთან, მაგრამ მათი შეცვლა შესაძლებელია დეტალებით. SQL ენის ძირითადი კონსტრუქციები არც თუ ისე მდიდარია და მუდმივი პრაქტიკისთვის, სუნი სწრაფად ივიწყება. მაგალითად, ობიექტების შესაქმნელად (ცხრილი, ინდექსი, ინდექსი და ა.შ.), მონაცემთა ბაზასთან მუშაობისთვის საკმარისია ტექსტური რედაქტორი (IDE) მონაცემთა ბაზასთან მუშაობისთვის და არ არის საჭირო ვიზუალური ინსტრუმენტების გამოყენება. მონაცემთა ბაზის კონკრეტული ტიპი (MS SQL), Oracle, MySQL, Firebird, ...). მოსახერხებელია, რომ მთელი ტექსტი თქვენს თვალწინ იყოს და არ არის აუცილებელი ციფრული ჩანართების დალაგება, მაგალითად, ინდექსის ან გაცვლის შესაქმნელად. მონაცემთა ბაზასთან მუშაობისას, შექმნას, შეცვალოს და განსაკუთრებით ხელახლა შექმნა ობიექტი დამატებითი სკრიპტებისთვის, ის უფრო სწრაფად გამოჩნდება, უფრო დაბალი, როგორც ეს იყო, ვიზუალურ რეჟიმში მუშაობა. ასევე, სკრიპტირების რეჟიმში (vіdpovіdno, სათანადო სიზუსტისთვის), უფრო ადვილია ობიექტების დასახელების წესების დადგენა და კონტროლი (ჩემი სუბიექტური აზრი). მანამდე კი სკრიპტების ხელით შესწორება დროდადრო შეიძლება, თუ ისინი შეიცვლება, თუ როუმირებულია ერთ მონაცემთა ბაზაში (მაგალითად, სატესტო), აუცილებელია მისი გადატანა სხვა მონაცემთა ბაზაში (პროდუქტიული) ისე.

Mova SQL იყოფა რამდენიმე ნაწილად, აქ მე გადავხედავ 2 ყველაზე მნიშვნელოვან ნაწილს:
  • DML - მონაცემთა მანიპულირების ენა
    • SELECT - მონაცემების შერჩევა
    • INSERT - ჩადეთ ახალი მონაცემები
    • UPDATE - მონაცემთა განახლება
    • DELETE - მონაცემების წაშლა
    • შერწყმა - გაბრაზებული დანიჰ
იმიტომ რომ მე ვარ პრაქტიკოსი, რადგან ასეთი თეორია არ იქნება საკმარისი მოცემული ასისტენტისთვის და ყველა კონსტრუქცია ახსნილია პრაქტიკულ კონდახებზე. მანამდე, მე მაინტერესებს, რომ ენის პროგრამირება და განსაკუთრებით SQL-ის ათვისება შესაძლებელია მხოლოდ პრაქტიკაში, თვითშესწავლით და იმის გაგებით, თუ რა უნდა იყოს, თუ მოიგებთ ამ chi სხვა დიზაინს.

ეს ასისტენტი შეიქმნა Step by Step, tobto-ს პრინციპით. ამის შემდეგ აუცილებელია იოგოს წაკითხვა და ჩანთაზე დადება. და თუ თქვენ გჭირდებათ მეტი გაიგოთ კონკრეტული ბრძანების შესახებ, მაშინ მოძებნეთ კონკრეტული ძებნა ინტერნეტში, მაგალითად, MSDN ბიბლიოთეკიდან.

ამ ასისტენტის დაწერის საათამდე, მე გამოვკითხე MS SQL Server ვერსიის 2014 მონაცემთა ბაზა, სკრიპტების აკრეფისთვის, მე გამოვკითხე MS SQL Server Management Studio (SSMS).

მოკლედ MS SQL Server Management Studio (SSMS) შესახებ

SQL Server Management Studio (SSMS) არის პროგრამა Microsoft SQL Server-ისთვის მონაცემთა ბაზის კომპონენტების კონფიგურაციის, მართვისა და ადმინისტრაციისთვის. ეს პროგრამა ჩაანაცვლებს სკრიპტის რედაქტორს (რომელსაც ძირითადად ჩვენ გამოვიყენებთ) და გრაფიკულ პროგრამას, რომელიც მუშაობს ობიექტებთან და ასწორებს სერვერს. SQL Server Management Studio-ის მთავარი ინსტრუმენტია Object Explorer, რომელიც საშუალებას გაძლევთ გადახედოთ, ნახოთ სერვერის ობიექტები და ასევე გადახედოთ მათ. ეს ტექსტი ხშირად არის მოხსენიებული ვიკიპედიიდან.

ახალი სკრიპტის რედაქტორის შესაქმნელად დააჭირეთ ღილაკს New Query:

ნაკადის მონაცემთა ბაზის შესაცვლელად, შეგიძლიათ გადაატრიალოთ სია, რომელსაც ხედავთ:

სიმღერის ბრძანების (ან ბრძანებების ჯგუფის) მოსაგებად, შეგიძლიათ იხილოთ იგი და დააჭიროთ ღილაკს "Execute / Vikonati" ან "F5" ღილაკს. როგორც წესი, რედაქტორში ამჟამად მხოლოდ ერთი ბრძანებაა, თორემ ყველა ბრძანება უნდა აირჩიოთ, არაფრის ნახვა არ გჭირდებათ.

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

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

ტროქიის თეორია

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

DBMS - მონაცემთა ბაზის მართვის სისტემა, tobto. ინსტრუმენტების კომპლექსი კონკრეტული ტიპის მონაცემთა ბაზასთან მუშაობისთვის (MS SQL, Oracle, MySQL, Firebird, ...).

შენიშვნა
იმიტომ რომ ცხოვრებაში, რომაულ ენაზე, ჩვენ ვამბობთ უფრო მნიშვნელოვანს: "Oracle DB" და უბრალოდ ვუწოდებთ "Oracle", ნამდვილად ჰგავს "Oracle DBMS", მაშინ ამ ასისტენტის კონტექსტი შეიძლება გამოყენებულ იქნას ტერმინის DB კონტექსტში. კონტექსტიდან გამომდინარე, ჩემი აზრით, გონივრული იქნებოდა ამაზე თავად წავსულიყავი.

მაგიდა Stovptsі, ასე რომ, მათ შეიძლება ეწოდოს მინდვრები და სტოვპჩიკები, ყველა სიტყვა იქნება გამარჯვებული, როგორც სინონიმები, რომლებსაც ისინი საკუთარ თავს ამბობენ.

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

კანის მაგიდები, როგორც იმ її stovptsіv მიენიჭა სახელები, როგორი წლის განმავლობაში მათ წასვლა ცხოველი.
ობიექტის სახელს (ცხრილის სახელი, სვეტის სახელი, ინდექსის სახელი) MS SQL-ში შეიძლება ჰქონდეს მაქსიმალური სიგრძე 128 სიმბოლო.

დასასრულებლად– DB ORACLE ობიექტების სახელებს შეიძლება ჰქონდეს მაქსიმუმ 30 სიმბოლო. ამიტომ, კონკრეტული მონაცემთა ბაზისთვის აუცილებელია ობიექტების დასახელების საკუთარი წესების შეცვლა, რათა შეესაბამებოდეს სიმბოლოების რაოდენობის ლიმიტს.

SQL - ენა, რომელიც საშუალებას გაძლევთ ჩაწეროთ მონაცემთა ბაზაში DBMS-ის წინ. კონკრეტული DBMS-ისთვის, SQL ენას შეიძლება ჰქონდეს კონკრეტული იმპლემენტაცია (საკუთარი დიალექტი).

DDL და DML - SQL ფილმის ქვეჯგუფი:

  • Mova DDL ემსახურება მონაცემთა ბაზის სტრუქტურის შეცვლამდე, tobto. ცხრილების და ბმულების შესაქმნელად/შესაცვლელად/საჩვენებლად.
  • Mova DML საშუალებას გაძლევთ მანიპულიროთ მონაცემები ცხრილებიდან, tobto. h її რიგები. Win გაძლევთ საშუალებას აირჩიოთ მონაცემები ცხრილებიდან, დაამატოთ ახალი მონაცემები ცხრილებში და ასევე განაახლოთ და ნახოთ შესაბამისი მონაცემები.

Move SQL-ს შეიძლება ჰქონდეს 2 ტიპის კომენტარი (ერთ რიგიანი და მრავალმწკრივი):

ერთი რიგის კომენტარი
і

/* შეცდომა რიგითი კომენტარი */

ვლასნე, თეორიისთვის ყველაფერი საკმარისი იქნება.

DDL - მონაცემთა განმარტების ენა

მაგალითად, მოდით შევხედოთ ცხრილს სპივრობიტნიკოვის შესახებ მონაცემებით, პროგრამისტის შემთხვევაში, რომელიც არ არის є:

ცხრილების სხვადასხვა სვეტს შეიძლება ჰქონდეს შემდეგი სახელები: პერსონალის ნომერი, PIB, დაბადების თარიღი, ელ. ფოსტა, Posada, Vіddіl.

ამ stovptsіv-ის კანი შეიძლება ხასიათდებოდეს იმ ტიპის მონაცემებით, რომლებიც შურისძიებაა ახალში:

  • პერსონალის ნომერი - მთელი ნომერი
  • PIB - რიგი
  • დაბადების თარიღი - თარიღი
  • ელ.ფოსტა - მწკრივი
  • პოზადა - რიგი
  • Viddil - რიგი
Stovptsya ტიპის - მახასიათებელი, როგორ ვისაუბროთ მათზე, yakі danі შეგიძლიათ დაზოგოთ dans stovpets.

დასაწყისისთვის საკმარისი იქნება მხოლოდ ისეთი ძირითადი ტიპის მონაცემების დამახსოვრება, როგორც ისინი დაწერილია MS SQL-ში:

ღირებულება დანიშნულია MS SQL-ის მიერ აღწერა
გამოსაცვლელი სახლის რიგი ვარჩარ(N)
і
nvarchar(N)
დამატებითი რიცხვისთვის N შეგვიძლია მივუთითოთ მწკრივის მაქსიმალური სიგრძე ორმაგი მწკრივისთვის. მაგალითად, თუ გსურთ თქვათ, რომ მნიშვნელობა "PIB" შეიძლება შეიცავდეს მაქსიმუმ 30 სიმბოლოს, უნდა მიუთითოთ ტიპი nvarchar(30).
განსხვავება varchar-სა და nvarchar-ს შორის არის ის, რომ varchar საშუალებას გაძლევთ შეინახოთ რიგები ASCII ფორმატიდან, სადაც ერთი სიმბოლო იღებს 1 ბაიტს, ხოლო nvarchar იღებს რიგებს Unicode ფორმატიდან, როდესაც სიმბოლო იღებს 2 ბაიტს.
varchar ტიპის არჩევა შესაძლებელია მხოლოდ ისე, რომ თქვენ 100% დარწმუნებული ხართ, რომ არ არის აუცილებელი ამ ველში Unicode სიმბოლოების შენახვა. მაგალითად, varchar შეიძლება გამოყენებულ იქნას ელექტრონული ფოსტის მისამართის შესანახად, რადგან stink მღერის ASCII სიმბოლოებზე მეტს.
ფიქსირებული დოჟინის რიგი char(N)
і
nchar(N)
ცვალებადი დოჟინის მწკრივში ეს ტიპი ითვლება ერთნაირად, რომ პირველი რიგი არის N სიმბოლოზე ნაკლები; ის იღებს ზუსტად N სიმბოლოს მონაცემთა ბაზიდან (ერთი სიმბოლო იღებს 1 ბაიტს char-ისთვის და 2 ბაიტს nchar ტიპისთვის). პრაქტიკაში, დანიაში, ტიპი იშვიათად არის ცნობილი, რომ გადატვირთულია და ის ჩვეულებრივ იმარჯვებს, რაც უფრო მნიშვნელოვანია char(1) ფორმატში. თუ ველი ერთი სიმბოლოა.
Მთელი რიცხვი ინტ დანიური ტიპი საშუალებას გვაძლევს ვიმღეროთ სტოვპციში მთელ რიცხვზე მეტი, როგორც დადებითი, ასევე უარყოფითი. დასასრულისთვის (ეს ჩვენთვის არც ისე მნიშვნელოვანია) - რიცხვების დიაპაზონი, რომელიც საშუალებას აძლევს int ტიპის -2 147 483 648-დან 2 147 483 647-მდე. დაასახელეთ ძირითადი ტიპი, რომელიც გამოიყენება იდენტიფიკატორების დასაყენებლად.
მეტყველება chi deisne ნომერი ათწილადი თუ თქვენ საუბრობთ უბრალო ენაზე, მაშინ ეს არის რიცხვები, რომლებშიც შეიძლება იყოს ათეული წერტილი (კომა).
თარიღი თარიღი თუ ღუმელებზე საჭიროა მხოლოდ თარიღის შენახვა, რადგან ის გროვდება სამი საწყობიდან: ნომრები, თვეები და როკუ. Napriklad, 02/15/2014 (Fierce 15, 2014). დანიური ტიპი შეიძლება შეირჩეს "მიღების თარიღი", "დაბადების თარიღი" და ა.შ. წყნარ სიტუაციებში, თუ ჩვენთვის მნიშვნელოვანია თარიღის დაფიქსირება, მაგრამ თუ საწყობის საათი არ არის მნიშვნელოვანი ჩვენთვის, შეგვიძლია გავიდეთ, წინააღმდეგ შემთხვევაში ვერ დავინახავთ.
საათი დრო დანიურ ტიპს სცემეს, ამიტომ საჭიროა სტოვპტიდან მოცემულ საათზე მეტის დაზოგვა, ტობტო. წლები, ხვილინი, წამები და მილიწამები. მაგალითად, 17:38:31.3231603
მაგალითად, ცნობილი "ფრენის გამგზავრების საათი".
თარიღი და საათი თარიღის დრო ეს ტიპი საშუალებას გაძლევთ შეინახოთ როგორც თარიღი, ასევე საათი ერთდროულად. მაგალითად, 02/15/2014 05:38:31.323 PM
კონდახისთვის შეგიძლიათ, მაგრამ თარიღი იგივე საათია, როგორც უნდა იყოს.
პრაპორი ცოტა დანიური ტიპი ხელით არის დაყენებული, რათა შეინახოს ფორმის მნიშვნელობა "Tak" / "Hi", de "Tak" აღებულია როგორც 1, ხოლო "Hi" მიიღება როგორც 0.

ასე რომ, თავად ველის მნიშვნელობა, მიუხედავად იმისა, რომ ის არ არის შემოღობილი, შეიძლება არ იყოს მითითებული, ველის მნიშვნელობისთვის არჩეულია საკვანძო სიტყვა NULL.

განაცხადის მიზნებისთვის შევქმნათ სატესტო მონაცემთა ბაზა სახელწოდებით Test.

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

მონაცემთა ბაზის შექმნა ტესტი
თქვენ შეგიძლიათ ნახოთ მონაცემთა ბაზა ბრძანებით (ჩვენ ასევე დაგიცავთ ამ ბრძანებისგან):

DROP DATABASE ტესტი
ჩვენს მონაცემთა ბაზაში გადასასვლელად შეგიძლიათ გამოიყენოთ ბრძანება:

აშშ ტესტი
წინააღმდეგ შემთხვევაში, აირჩიეთ ტესტის მონაცემთა ბაზა სიიდან SSMS მენიუს ზონაში. ჩემთან მუშაობისას ყველაზე ხშირად ვიმარჯვებ ბაზებს შორის გადართვის მეთოდით.

ახლა ჩვენ შეგვიძლია შევქმნათ ცხრილი ჩვენს მონაცემთა ბაზაში, ვიკორისტის აღწერილობები ჰგავს სუნს, ვიკორისტმა დაწერა ეს კირიული სიმბოლოები:

შექმენით ცხრილი [ჩამწერები]([პერსონალის ნომერი] int, [PIB] nvarchar(30), [Pop Date] თარიღი, nvarchar(30), [Posada] nvarchar(30), [Viddil] nvarchar(30))
ამ შემთხვევაში, ჩვენ შემთხვევით ვსვამთ სახელებს კვადრატულ მშვილდ [...].

გარდა ამისა, მონაცემთა ბაზაში მეტი სიცხადისთვის, ობიექტების ყველა დასახელება უფრო მოკლედ უნდა იყოს მითითებული ლათინურ ენაზე და არ იმღეროს გლედის სახელებში. MS SQL-ში ჟღერს ამავდროულად სიტყვა იწყება დიდი ასოთი, მაგალითად, ველზე "Personnel number" შეგვიძლია დავაყენოთ სახელი PersonnelNumber. ასევე, სახელი შეიძლება გადაუგრიხეს რიცხვებით, მაგალითად, PhoneNumber1.

შენიშვნა
ზოგიერთი DBMS-ისთვის შეგვიძლია შევამოკლოთ სახელწოდების არსებული ფორმატი "PHONE_NUMBER", მაგალითად, ეს ფორმატი ხშირად გამოიყენება ORACLE მონაცემთა ბაზაში. ბუნებრივია, ველის დასახელების დაყენებისას არ არის აუცილებელი თავიდან ავიცილოთ საკვანძო სიტყვები, რომლებიც შერჩეულია DBMS-ში.

რატომღაც, შეგიძლიათ დაივიწყოთ სინტაქსი კვადრატული თაღებით და ნახოთ ცხრილი [Spivrobitniki]:

ჩამოაგდეს მაგიდა
მაგალითად, ცხრილს 3 მუშაკით შეიძლება ეწოდოს „თანამშრომლები“, ხოლო її ველებს შეიძლება მიენიჭოთ შემდეგი სახელები:

  • ID - პერსონალის ნომერი (აბონენტის იდენტიფიკატორი)
  • სახელი - PIB
  • დაბადების დღე - დაბადების დღე
  • ელფოსტა
  • პოზიცია - პოზადა
  • დეპარტამენტი - Viddil
იდენტიფიკატორის ველის ყველაზე გავრცელებული სახელია სიტყვა ID.

ახლა შევქმნათ ჩვენი ცხრილი:

CREATE TABLE თანამშრომლები (ID int, სახელი nvarchar(30), დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი nvarchar(30))
იმისათვის, რომ დააყენოთ სტრიქონები stowpci-სთვის, შეგიძლიათ გამოიყენოთ NOT NULL ვარიანტი.

უკვე ძირითადი ცხრილისთვის, ველების ხელახლა მინიჭება შესაძლებელია შეტევითი ბრძანებების დახმარებით:





























ID ველის განახლება ALTER TABLE თანამშრომლები ALTER COLUMN nvarchar(30) NOT NULL

შენიშვნა
SQL mov-ის ძირითადი კონცეფცია DBMS-ების უმეტესობისთვის იგივე დარჩა (შემიძლია ვიმსჯელო ამ DBMS-ის შესახებ, რომლის გაუმჯობესების შანსი მქონდა). DDL-ის ფარგლები სხვადასხვა DBMS-ებში ძირითადად დაკავშირებულია მონაცემთა ტიპებთან (აქ არა მხოლოდ მათი სახელები, არამედ მათი განხორციელების დეტალები შეიძლება შეიცვალოს), ასე რომ, იგივე სამი შეიძლება შეიცვალოს და SQL-ის განხორციელების სპეციფიკა ( მაშინ ბრძანებების არსი არის იგივე მცირე განსხვავებები დიალექტში, სამწუხაროდ, არ არსებობს ერთი სტანდარტი). SQL-ის საფუძვლებით, შეგიძლიათ გადახვიდეთ ერთი DBMS-დან მეორეზე, რადგან თქვენ უნდა გაიგოთ მეტი ბრძანებების განხორციელების დეტალების შესახებ ახალ DBMS-ში, შემდეგ. უმეტეს შემთხვევაში, საკმარისი იქნება უბრალოდ ანალოგიის დახატვა.

ცხრილის შექმნა CREATE TABLE Employees(ID int, -- ORACLE ტიპის int უდრის რიცხვს(38) სახელი nvarchar2(30), -- nvarchar2 ORACLE-ში არის nvarchar MS SQL-ში დაბადების თარიღი, ელფოსტა n , პოზიცია nvarchar23 ( ), დეპარტამენტი nvarchar2(30)); -- განაახლეთ ველები ID და სახელი (აქ ALTER COLUMN შეიცვალა MODIFY(...)) ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- დაამატეთ PK (როგორც კონსტრუქცია ჰგავს i-ს MS SQL-ში, ქვემოთ იქნება ნაჩვენები) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
ORACLE-სთვის, varchar2 ტიპის დანერგვის თვალსაზრისით, მისი კოდირება შეიძლება შეინახოს მონაცემთა ბაზაში და ტექსტი შეინახოს, მაგალითად, UTF-8 კოდირებიდან. უპირველეს ყოვლისა, ORACLE-ში ველის სიგრძის დაყენება შესაძლებელია როგორც ბაიტებში, ასევე სიმბოლოებში, რისთვისაც მითითებულია დამატებითი ოფციები BYTE და CHAR, რომლებიც მითითებულია ველის სიგრძის შემდეგ, მაგალითად:

NAME varchar2(30 BYTE) -- ველის ფარგლები 30 ბაიტამდე NAME varchar2(30 CHAR) -- ველის სივრცე 30 სიმბოლომდე
როგორც ოფცია, შესაძლებელი იქნება BYTE ან CHAR საკეტების ჩანაცვლება, ORACLE ტიპის varchar2(30) მარტივი ჩასმის შემთხვევაში, DB პატჩში შესანახად, ასე რომ ზოგჯერ შეიძლება მითითებული იყოს IDE საკეტებში. ერთი საათის განმავლობაში შეგიძლიათ მარტივად დაიკარგოთ, რადგან ORACLE ტიპი, როგორც წესი, იყენებს varchar2 ტიპს (და აქ ეს ასეა ერთი საათის განმავლობაში, მაგალითად, UTF-8 კოდირებით), მე ვცდილობ ცალსახად დავწერო CHAR ( რადგან სჯობს მწკრივის ნომერს თავად დაურეკოთ სიმბოლოებით).

მაგრამ ამავე დროს ცხრილებში უკვე არის є yak-nebud მონაცემები, შემდეგ ბრძანებების წარმატებული აკრეფისთვის აუცილებელია ცხრილის ყველა სტრიქონს ჰქონდეს ID და Name ველები obov'yazkovo zapovneni. ჩვენ გავაკეთებთ მის დემონსტრირებას მაგალითზე, ჩავსვით მას მონაცემთა ცხრილში ID, თანამდებობა და დეპარტამენტი ველებში, რომლებიც შეიძლება გენერირებული იყოს შემდეგი სკრიპტით:

INSERT Employees(ID, თანამდებობა, დეპარტამენტი) VALUES (1000,N"დირექტორი",N"ადმინისტრაცია"), (1001,N"პროგრამისტი",N"IT"), (1002,N"ბუღალტერი",N"ბუღალტერია" ), (1003,N"უფროსი პროგრამისტი",N"IT")
ზოგჯერ, INSERT ბრძანება ასევე ხედავს შეწყალებას, რადგან ჩასმისას მათ არ მიანიჭეს სახელი ველის მნიშვნელობა ენის ველს.
თუ ჩვენ გვქონდა მონაცემები ცხრილში, მაშინ ბრძანება "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" წარმატებული იქნებოდა და ბრძანება "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" ხედავდა გაფრთხილებას შეწყალების შესახებ, რომ სახელი არის ველი. NULL (არ არის მინიჭებული) მნიშვნელობა.

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


ასევე, NOT NULL ოფცია შეიძლება სცემეს ყოველ ჯერზე ახალი ცხრილის შექმნისას, ანუ. CREATE TABLE ბრძანების კონტექსტში.

უკანა მხარეს ჩვენ ვხედავთ ცხრილს ბრძანების დასახმარებლად:

DROP TABLE თანამშრომლები
ახლა შევქმნათ ცხრილი, რომელშიც სავალდებულოა სვეტების ID და Name:

CREATE TABLE თანამშრომლები(ID int NOT NULL, სახელი nvarchar(30) NOT NULL, დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი nvarchar(30))
თქვენ ასევე შეგიძლიათ დაწეროთ NULL სახელის შემდეგ, რაც ნიშნავს, რომ NULL მნიშვნელობები (არ არის მითითებული) ძალაში იქნება ახალში, მაგრამ ნამუშევარი არ არის obov'yazkovo, ამიტომ მახასიათებელი მოცემულია გაგებისთვის.

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

ALTER TABLE თანამშრომლები ALTER COLUMN სახელი nvarchar(30) NULL
აბო მარტივია:

ALTER TABLE Employees ALTER COLUMN სახელი nvarchar(30)
ამ ბრძანებით ჩვენ ასევე შეგვიძლია შევცვალოთ ველის ტიპი ქვედა ჯამით, ან შევცვალოთ მეორე. მაგალითად, გააფართოვეთ სახელის ველი 50 სიმბოლომდე:

ALTER TABLE Employees ALTER COLUMN სახელი nvarchar(50)

Მთავარი გასაღები

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

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

ALTER TABLE თანამშრომლები ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
De "PK_Employees" tse іm'ya obmezhennya, scho vydpovidaє პირველი გასაღებისთვის. ხმოვანი ძირითადი გასაღების სახელი, პრეფიქსი „PK_“ შეირჩევა ნებისმიერი ცხრილის სახელის შემდეგ.

ვინაიდან პირველი გასაღები ჩამოყალიბებულია დეკილკოჰის ველებიდან, მაშინ ეს ველები ხელახლა უნდა გადაიტანოთ თაღებში, რომელთა მეშვეობითაც:

ცხრილის_სახელის შეცვლა.
ვარტომ მიუთითებს, რომ MS SQL-ში ველები უნდა იყოს ჩართული პირველადი გასაღების წინ, NOT NULL მახასიათებლის გამო.

ასევე, პირველი კლავიშის მინიჭება შესაძლებელია დაუყოვნებლად ცხრილის შექმნის დროს, tobto. CREATE TABLE ბრძანების კონტექსტში. ვნახოთ ცხრილი:

DROP TABLE თანამშრომლები
და შემდეგ შევქმნათ її, vikoristovuyuuchi შეურაცხმყოფელი სინტაქსი:

CREATE TABLE თანამშრომლები(ID int NOT NULL, სახელი nvarchar(30) NOT NULL, დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი nvarchar(30), შეზღუდვა PK_Employees ყველა ველის ძირითადი გასაღები)
მონაცემთა ცხრილში მონაცემების შექმნის შემდეგ:

INSERT Employees (ID, თანამდებობა, დეპარტამენტი, სახელი) VALUES (1000,N"Director",N"Administration",N"Ivanov I.I."), (1001,N"პროგრამისტი",N"IT",N"Petrov PP" ), (1002,N"ბუღალტერი",N"ბუღალტერია",N"Sidoriv SS"), (1003,N"უფროსი პროგრამისტი",N"IT",N"Andreev A. BUT.")
ვინაიდან ცხრილის პირველი გასაღები ერთი სვეტის მნიშვნელობაზე ნაკლებია, შეგიძლიათ გადაუგრიხოთ შემდეგი სინტაქსი:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- შეიძლება მითითებული იყოს როგორც ველის მახასიათებელი სახელი nvarchar(30) NOT NULL, დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი n
თქვენ შეგიძლიათ და არ დააყენოთ ნამდვილი სახელი, რომლისთვისაც მოგეცემათ სისტემის სახელი („PK__Employee__3214EC278DA42077“ ველისთვის):

შექმენით ცხრილი თანამშრომლები(ID int NOT NULL, სახელი nvarchar(30) NOT NULL, დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი nvarchar(30), PRIMARY KEY(ID))
აბო:

CREATE TABLE Employees(ID int NOT NULL PRIMARY KEY, სახელი nvarchar(30) NOT NULL, დაბადების თარიღი, ელფოსტა nvarchar(30), თანამდებობა nvarchar(30), დეპარტამენტი nvarchar(30))
Ale, მე გირჩევთ bi post_ynih მაგიდებისთვის zavzhdya ცალსახად დაყენებული im'ya obmezhennya, tk. მათი მკაფიოდ დაყენებისა და გაგებისთვის, მასთან მანიპულაციების განხორციელება უფრო ადვილი იქნება, მაგალითად, შეგიძლიათ შეიმუშაოთ შემდეგი:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees
მაგრამ ასეთი მოკლე სინტაქსი, საზღვრისთვის სახელების მინიჭების გარეშე, ხელით აფიქსირებს მონაცემთა ბაზის დროის ცხრილის შექმნის საათს (დროის ცხრილის დრო დაფუძნებულია # chi ##-ზე), როგორც კი მატჩი მოხდება. ჩანს.

ალბათ

მაშინვე გადავხედეთ მოწინავე ბრძანებებს:
  • მაგიდის შექმნაცხრილის_სახელი (ამ ტიპის ველების ხელახალი ზედაპირი, დელიმიტაცია) – ემსახურება სტრიმინგის მონაცემთა ბაზაში ახალი ცხრილის შექმნამდე;
  • ჩამოაგდეს მაგიდა table_name – ემსახურება როგორც დისტანციურ ცხრილს ნაკადის მონაცემთა ბაზიდან;
  • ALTER Tableცხრილის_სახელი ალტერული სვეტი im'ya_stovptsya ... – ემსახურება stovptsya ტიპის განახლებას ან მისი პარამეტრის შეცვლას (მაგალითად, დამახასიათებელი NULL ან NOT NULL დასაყენებლად);
  • ALTER Tableცხრილის_სახელი შეზღუდვის დამატება im'ya_obezhennya ᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ(ველი1, ველი2,…) – პირველადი გასაღების დამატება უკვე არსებულ ცხრილზე;
  • ALTER Tableცხრილის_სახელი ვარდნის შეზღუდვა exchange_name - დისტანციური გაცვლა ცხრილებიდან.

ტროჩები ტიმჩას მაგიდების შესახებ

Virizka MSDN-დან. MS SQL სერვერს აქვს ორი ტიპის დროის ცხრილი: ლოკალური (#) და გლობალური (##). ლოკალური დროის ცხრილები ნაკლებად ჩანს მათი შემქმნელებისთვის, სანამ სესია არ დასრულდება SQL Server-ის ეგზემპლარით, ისევე როგორც წარსულში წარმოქმნილი სუნი. ადგილობრივი საათის ცხრილები ავტომატურად ჩანს, როდესაც საათი ჩართულია SQL Server-ის მაგალითზე. გლობალური საათის ცხრილები ჩანს ყველა დროის ცხრილით, არის თუ არა ისინი შექმნილი ამ ცხრილების შექმნის შემდეგ და ჩანს თუ არა, თუ ყველა საათი, თითქოს ისინი იგზავნება ცხრილებში, შედის SQL Server-ის ინსტანციაში.

დროის ცხრილები იქმნება tempdb სისტემის მონაცემთა ბაზაში, ანუ. მათი შექმნა ძირითადი მონაცემთა ბაზის მიერ დანახვის გარეშე, სხვა დროის ცხრილში, ისინი იდენტურია ძირითადი ცხრილების, მათი ნახვა შესაძლებელია DROP TABLE ბრძანების დახმარებით. ყველაზე ხშირად, ადგილობრივი (#) საათის ცხრილები გამარჯვებულია.

დროის ცხრილის შესაქმნელად შეგიძლიათ გამოიყენოთ ბრძანება CREATE TABLE:

შექმენით ცხრილი #ტემპ (ID int, სახელი nvarchar(30))
ვინაიდან დროის ცხრილი MS SQL-ში პირველადი ცხრილის მსგავსია, მისი ნახვა ასევე შესაძლებელია თავად DROP TABLE ბრძანებით:

ჩამოაგდეს მაგიდა #ტემ

ასე რომ, თავად დროის ცხრილი (როგორც ორიგინალური ცხრილი) შეიძლება შეიქმნას და დაუყოვნებლივ ჩაიტვირთოს მონაცემებით, რომელიც ბრუნავს გამარჯვებული სინტაქსით SELECT ... INTO:

აირჩიეთ ID, Name INTO #Temp FROM თანამშრომლებისგან

შენიშვნა
სხვადასხვა DBMS-ში დროის ცხრილების განხორციელება შეიძლება განსხვავებული იყოს. მაგალითად, ORACLE-სა და Firebird DBMS-ში, საათის ცხრილების სტრუქტურა განპირობებულია, მაგრამ ის წინასწარ არის მინიჭებული CREATE GLOBAL TEMPORARY TABLE ბრძანებით, მითითებული დაზოგვის სპეციფიკიდან n_y მონაცემებში, მიცემული იყო შუა რიცხვის შესამოწმებლად. მთავარი მაგიდები და იმუშავეთ მასთან, როგორც ვარსკვლავური მაგიდა.

მონაცემთა ბაზის ნორმალიზება - ქვეცხრილებად (დოკუმენტებად) დაყოფა და ბმულების მინიჭება

ჩვენი სტრიმინგის ცხრილი თანამშრომლები შეიძლება არ იყოს საკმარისი მათთვის, ვისაც შეუძლია კორისტუვაჩის პოზიციის და დეპარტამენტის ველებში ნებისმიერი ტექსტის შეყვანა, რომელიც წლის პირველ ნაწილში შეწყალებით დამემუქრება, ასე რომ, როგორც ერთი spіvrobіtnik ღვინო შეიძლება ითქვას იაკ. vіddіl უბრალოდ „ІТ“ და სხვა spіvrobіtnik, მაგალითად, ჩაწერეთ „IT-viddil“, მესამე „IT“-ზე. შედეგად, უსაფუძვლო იყო, რომ დედა უვაზის კორისტუვაჩზე, ტობტოზე იყო. რას აძლევდნენ იმავე vіddіlu-ს პრაქტიკოსების მიერ მიცემული spіvrobіtniki, რას აღწერდა კორისტუვაჩმა და ცე 3 სხვადასხვა vіddіlu? და ამ დროისთვის, ჩვენი აზრით, ჩვენ არ შეგვიძლია სწორად დავაჯგუფოთ მონაცემები ასეთი სახელის შესახებ, დე, შესაძლებელია, კანის დაავადების ანალიზში სპივრობიტნიკების რაოდენობის ჩვენებაა საჭირო.

სხვა nedolіk polygaє y obsyazі zberіgannya tsієї іnformatsії її її dubluvannyam, tobto. კანის საძიებლად, საჭიროა დასახელდეს საძიებელი სახელი, რაც ნიშნავს DB სივრცეს სკინგის სიმბოლოს ასაღებად დაკვირვების სახელისთვის.

მესამე ნედოლიკი არის ამ ველების განახლების დასაკეცი, თითქოს მცენარის სახელის შეცვლა, მაგალითად, რადგან აუცილებელია სახელის შეცვლა "პროგრამისტი" "ახალგაზრდა პროგრამისტი". ამ ეტაპზე, ჩვენ შევძლებთ ცვლილებების შეტანას მაგიდის კანის რიგზე, იმავე Posada dorovnyu «პროგრამისტში».

ამ ხარვეზების თავიდან ასაცილებლად და zastosovuєtsya ე.წ. მონაცემთა ბაზის ნორმალიზაცია - მათი დაყოფა ქვეცხრილებად, ცხრილებად dovidniki. ეს არ არის obov'yazkovo მოტყუება არასამმაგი თეორიები და ირონია, რა წარმოვიდგინოთ ნორმალური ფორმები, საკმარისია გავიგოთ არსი ნორმალიზება.

შევქმნათ 2 ცხრილი „მცენარე“ და „ვიდილი“, პირველს ჰქვია პოზიციები, მეორეს კი განყოფილებები:

ცხრილის პოზიციების შექმნა(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) TABLE დეპარტამენტების შექმნა(ID int IDENTITY(1,1) NOT NULL შეზღუდვა NPKMARULYDepartments)
პატივისცემით, ჩვენ აქ ავირჩიეთ ახალი IDENTITY ვარიანტი, ასე რომ ვთქვათ, ის, რაც მოცემულია ID სვეტში, ავტომატურად ინომრება, დაწყებული 1-დან, შემდეგ 1-დან. ახალი ჩანაწერების დამატებისას მათ თანმიმდევრულად ენიჭებათ მნიშვნელობები 1, 2, 3 და ა.შ. ასეთ ველებს ავტოინკრემენტულს უწოდებენ. ცხრილს შეიძლება ჰქონდეს ერთზე მეტი IDENTITY ველი მინიჭებული და, როგორც წესი, არ არის საჭირო, ველი, როგორც ამ ცხრილის ძირითადი გასაღები.

შენიშვნა
სხვადასხვა DBMS-ში, კერძო პირისგან მორწყვის განხორციელება შეიძლება საკუთარი თავისთვის იმუშაოს. მაგალითად, MySQL-ში ასეთი ველი ენიჭება დამატებით AUTO_INCREMENT ვარიანტს. ORACLE-სა და Firebird-ში, ადრე ამ ფუნქციის ემულაცია შეიძლებოდა სხვადასხვა თანმიმდევრობის (SEQUENCE) დახმარებით. რამდენადაც მე ვიცი, ORACLE-მა ერთდროულად დაამატა GENERATED AS IDENTITY ვარიანტი.

მოდით გავიხსენოთ ცხრილები ავტომატურად, თანამშრომლების ცხრილის თანამდებობისა და დეპარტამენტის ველებში ჩანაწერების ნაკადის მონაცემების საფუძველზე:

აიღეთ პოზიციების ცხრილის სახელის ველი უნიკალური მნიშვნელობებით თანამშრომლების ცხრილის პოზიციის ველიდან INSERT Position(Name) SELECT DISTINCT Position FROM Employees WHERE Position IS NULL - დააბრუნეთ ჩანაწერები, რომლებისთვისაც პოზიცია არ არის მითითებული
იგივე შესაძლებელია დეპარტამენტების ცხრილისთვის:

INSERT დეპარტამენტები(სახელი) SELECT DISTINCT Department FROM Employees WHERE Department IS NULL
როგორც ვუყურებთ პოზიციების და დეპარტამენტების ცხრილებს, ჩვენ ასევე შეგვიძლია დათვალოთ მნიშვნელობები ID ველში მნიშვნელობის აკრეფით:

აირჩიეთ * პოზიციებიდან

აირჩიეთ * განყოფილებებიდან

ცხრილების მონაცემები ახლა დოვიდნიკოვის როლს თამაშობს დასახლების ხელმძღვანელისთვის და viddіlіv. ახლა ჩვენ ვითხოვთ სადესანტო და vіddіlіv იდენტიფიკატორს. ჩვენ ვქმნით ახალ ველებს თანამშრომლების ცხრილში ამ იდენტიფიკატორების შესაგროვებლად:

მცენარის ველის დამატება ID ALTER TABLE Employees ADD PositionID int -- დაამატეთ ველი მცენარის ID ALTER TABLE Employees ADD DepartmentID int
შესაძლებელი მორწყვის ტიპი ორივეს ბრალია, როგორც დოვიდნიკებში, ამ წე ინტ.

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

ALTER TABLE Employees ADD PositionID int, DepartmentID int
ახლა ჩავწერთ ამ ველების მნიშვნელობას (შესაძლო გაცვლა - FOREIGN KEY), რათა მოცემულ ველებში არ იყოს შესაძლებელი ველებში მყოფი ID-ის მნიშვნელობის, საშუალო დღიური მნიშვნელობის ჩაწერა.

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID)
მე იგივე zrobimo სხვა სფეროსთვის:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES დეპარტამენტები(ID)
ახლა შესაძლებელია ამ ველისთვის დამატებითი ID მნიშვნელობის შეყვანა მითითებული თარიღიდან. როგორც ჩანს, თუ გსურთ მოიგოთ ახალი რეკორდი, ან დარგვა, ჩვენი პასუხისმგებლობა იქნება დავამატოთ ახალი რეკორდი საბოლოო თარიღს. იმიტომ რომ მცენარე, რომელიც სარეველა ახლა შენახულია dovіdniki-ში ერთ მაგალითში, შემდეგ სახელის შესაცვლელად საკმარისია შეცვალოთ її tіlki დოვიდნიკში.

Іm'ya possilnogo obezhennya, ზარი, є შესანახი, ის იკეცება პრეფიქსიდან "FK_", შემდეგ გადადით ім'я tablesі і ნიშნის ნიშნის შემდეგ іde ім'ya ველი, იაკ მოითხოვეთ ცხრილის იდენტიფიკატორი-წინასწარ .

Ідедтифікатор (ID) უკაცრავად є შიდა Valida, Yak Vikrotovsuchnyh Tіlki for Zak'yvikіv Æ Yaka არის zerigіnga იქ, Bіlshostі Vipadkiv-ში აბსოლუტურად Baiduj, ეს არ არის უპირატესად ჩაწერილი დიარეის დიარეით, დიარეით. robotylennya ჩანაწერები ექიმისგან.

ცხრილის შეცვლა tbl შეზღუდვის დამატება IM_ID უცხო გასაღები (ველი1, eld2,…) ბმულები ცხრილის_მისამართი (ველი1, eld2,…)
ამ შემთხვევაში, ცხრილში "table_domain" გამოსახულებების პირველი გასაღები არის დეკალის ველების კომბინაცია (ველი1, ველი2, ...).

კარგი, ახლა მოდით განვაახლოთ PositionID და DepartmentID ველები ID მნიშვნელობებით დოკუმენტებიდან. ატვირთეთ ეს DML UPDATE ბრძანებით:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
ჩვენ გაოცებული ვართ რა მოხდა, ვიკონავშიმ ჰკითხა:

აირჩიეთ * თანამშრომლებისგან

ესე იგი, ველები PositionID და DepartmentID, რომლებიც შევსებულია სხვადასხვა posads-ით და სხვა იდენტიფიკატორებით, ახლა მიუწვდომელია თანამდებობისა და დეპარტამენტის ველებში Employees ცხრილის, შეგიძლიათ ნახოთ ეს ველები:

ALTER TABLE თანამშრომლების DROP COLUMN თანამდებობა, დეპარტამენტი
ახლა ჩვენი ცხრილი ასე გამოიყურება:

აირჩიეთ * თანამშრომლებისგან

ID სახელი დაბადების დღე ელფოსტა პოზიციის ID დეპარტამენტის ID
1000 ივანოვი I.I. NULL NULL 2 1
1001 პეტროვი პ.პ. NULL NULL 3 3
1002 სიდოროვი ს.ს. NULL NULL 1 2
1003 ანდრეევი ა.ა. NULL NULL 4 3

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

აირჩიეთ e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Employees e LEFT JOIN დეპარტამენტები d ON d.ID=e.DepartmentID LEFT JOIN პოზიციები p ON p.ID=e.PositionID

Object Inspector-ში შეგვიძლია ჩავრთოთ ამ ცხრილისთვის შექმნილი ყველა ობიექტი. თქვენ შეგიძლიათ განახორციელოთ სხვადასხვა მანიპულაციები ამ ობიექტებით - მაგალითად, გადარქმევა და ამოიღეთ ობიექტები.

ასევე აუცილებელია მიეთითოს, რომ ცხრილი შეიძლება მოითხოვოს თავისთვის, ტობტო. შეიძლება გაკეთდეს რეკურსიულად ძალის გამოყენებით. კონდახისთვის, ჩვენ ცხრილს ვამატებთ კიდევ ერთ ველს ManagerID-ს spivrobitnik-ით, რადგან ეს მიუთითებს spivrobitnik-ზე, რომელზეც ეს spivrobitnik არის შეკვეთილი. ჩვენ ვქმნით ველს:

ALTER TABLE თანამშრომლები ADD ManagerID int
ამ ველს აქვს NULL-ის მოქმედი მნიშვნელობა, ველი ცარიელი იქნება, რადგან, მაგალითად, სპაზერის ზემოთ არ არის ზერიცხვები.

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

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_ManagerID FOREIGN Key (ManagerID) REFERENCES Employees(ID)
მოდით ახლა შევქმნათ დიაგრამა და გავაკვირვოთ, თუ როგორ ვუყურებთ კავშირებს ჩვენს ცხრილებს შორის:

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

გვინდა ვთქვათ, რომ თქვენს მიერ გაგზავნილი გასაღებები შეიძლება შეიცავდეს დამატებით ვარიანტებს ON DELETE CASCADE და ON UPDATE CASCADE, მინდა ვისაუბროთ მათზე, როგორ მოიქცეთ ჩანაწერის დანახვისას ან განახლებისას, როგორ გაგზავნოთ ის დანამატების ცხრილში. თუ არცერთი ვარიანტი არ არის მითითებული, მაშინ ჩვენ ვერ შევცვლით ID-ს ამ ჩანაწერის თარიღის ცხრილში, რომელიც იგზავნება სხვა ცხრილში, ასე რომ, ჩვენ ვერ ვხედავთ ასეთ ჩანაწერს თავად თარიღიდან, სანამ არ დავინახავთ ყველა მწკრივს, რომელიც იხილეთ ეს ჩანაწერი. კარგი, ახალია ამ რიგებში მეტი მნიშვნელობის დასამატებლად.

მაგალითად, მოდით ხელახლა შევქმნათ ცხრილი FK_Employees_DepartmentID-ისთვის მინიჭებული ON DELETE CASCADE ვარიანტებიდან:

DROP TABLE Employees CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), დაბადების თარიღი, ელფოსტა nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARYKE ) FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) )VALUES (1000,N"Ivanov II","19550219",2,"PPULET",2,10N "19831203",3,3,1003), (1002,N"Sidoriv SS","19760607",1,2,1000), (1003,N"Andreev AA ","19820417",4,3,1000)
ჩვენ ვნახეთ, რომ ეს გაკეთდა ID 3-ით დეპარტამენტების ცხრილიდან:

DELETE დეპარტამენტები WHERE ID=3
შევხედოთ მონაცემებს თანამშრომლების ცხრილში:

აირჩიეთ * თანამშრომლებისგან

ID სახელი დაბადების დღე ელფოსტა პოზიციის ID დეპარტამენტის ID მენეჯერის ID
1000 ივანოვი I.I. 1955-02-19 NULL 2 1 NULL
1002 სიდოროვი ს.ს. 1976-06-07 NULL 1 2 1000

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

ON UPDATE CASCADE ოფცია იგივენაირად იქცევა, მაგრამ მხოლოდ ID-ის მნიშვნელობის განახლებისას. მაგალითად, თუ ჩვენ შევცვლით მცენარის ID-ს posad-ის საკონტროლო სიაში, მაშინ ამ შემთხვევაში Employees ცხრილის დეპარტამენტის ID განახლდება ახალი ID მნიშვნელობით, როგორც ეს დავაყენეთ საკონტროლო სიაში. ალე, ამ ვიპადკა ცე დემონსტრირება არ ნახოს, რადგან დეპარტამენტების ცხრილის ID სვეტს უნდა ჰქონდეს IDENTITY ოფცია, რათა არ მოგვცეს იერიშის მიტანა მომდევნო მოთხოვნაზე (შეცვალეთ ჩანაწერის ID 3-დან 30-მდე):

განაახლეთ დეპარტამენტები SET ID=30 WHERE ID=3
Golovne zrozumit ციხის არსი 2 ვარიანტი ON DELETE CASCADE და ON UPDATE CASCADE. მე zastosovuyu tsі optsії კი იშვიათად და გირჩევთ კარგად დაფიქრდეთ, როგორ მოხვდეთ შესაძლებელი obezhennya, tk. ანგარიშის ცხრილიდან უცნობი ჩანაწერით, შეიძლება გამოიწვიოს დიდი პრობლემები და შექმნას ლანცუგის რეაქცია.

შენიშვნა 3:

დაშვებულია IDENTITY მნიშვნელობების დამატება/შეცვლა SET IDENTITY_INSERT დეპარტამენტები ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- IDENTITY მნიშვნელობების SET დამატების/ცვლის თავიდან აცილება
მოდით კვლავ გავასუფთავოთ Employees ცხრილი TRUNCATE TABLE ბრძანების დახმარებით:

TRUNCATE TABLE თანამშრომლები
კიდევ ერთხელ ვიმეორებ ამ მონაცემებში, გადახედე წინა INSERT ბრძანებას:

INSERT Employees (ID, Name, Birthday, PositionID, DepartmentID, ManagerID) VALUES (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." "19831203", ,3,1003), (1002,N"Sidoriv SS","19760607",1,2,1000), (1003,N"Andreev AA","19820417" ,4,3,1000)

ალბათ

ამ დროისთვის, ჩვენთვის ცნობილი გახდა კიდევ რამდენიმე DDL ბრძანება:
  • IDENTITY ველში დამატება - იძლევა ველის ავტომატურად შევსების საშუალებას ცხრილისთვის (ველის სახელი);
  • ALTER Tableცხრილის_სახელი დამატება change_fields_with_characteristics – გაძლევთ საშუალებას დაამატოთ ახალი ველები ცხრილში;
  • ALTER Tableცხრილის_სახელი ვარდნის სვეტი list_of_fields - გაძლევთ საშუალებას ნახოთ ველები ცხრილებიდან;
  • ALTER Tableცხრილის_სახელი შეზღუდვის დამატება im'ya_obezhennya ᲣᲪᲮᲝᲣᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ(ველები) ლიტერატურა doc_table(ველები) – გაძლევთ საშუალებას მიაკუთვნოთ ბმული ცხრილსა და doc ცხრილს შორის.

სხვა ბირჟები – UNIQUE, DEFAULT, CHECK

UNIQUE მორწყვისთვის შეგიძლიათ თქვათ, რა მნიშვნელობა აქვს კანის ხაზს მოცემულ მინდორში ან მორწყვის კომპლექტში. Employees ცხრილის შემთხვევაში, ასევე შეგიძლიათ განათავსოთ საზღვარი ელფოსტის ველზე. მხოლოდ წინასწარ დაიმახსოვრეთ ელფოსტის მნიშვნელობები, თითქოს ისინი ჯერ არ იყო მინიჭებული:

UPDATE Employees SET Email=" [ელფოსტა დაცულია]"WHERE ID=1000 UPDATE Employees SET Email=" [ელფოსტა დაცულია]" WHERE ID=1001 UPDATE Employees SET Email=" [ელფოსტა დაცულია]"WHERE ID=1002 UPDATE Employees SET Email=" [ელფოსტა დაცულია] WHERE ID=1003
ახლა კი შეგიძლიათ განათავსოთ ობმეჟენია-უნიკალურობის ველზე:

ALTER TABLE Employees ADD CONSTRAINT UQ_Employees_Email UNIQUE(ელფოსტა)
ახლა კორესპონდენტს არ შეუძლია იმავე ელ. ფოსტაში შესვლა რამდენიმე spivrobitnik-ით.

უნიკალურობის გაცვლას ასე ჰქვია - უპირველეს ყოვლისა, პრეფიქსი “UQ_”, ასახელებს ცხრილს და ველის სახელწოდების ქვედანაყოფის ნიშნის შემდეგ, თითქოს მოცემული გაცვლა ზედმეტად არის გადატანილი.

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

ALTER TABLE ცხრილის_სახელის დამატება.
დამატებითი დახმარებისთვის ნაგულისხმევი ველის დასამატებლად, ჩვენ შეგვიძლია დავაყენოთ დაბლოკვის მნიშვნელობა ისე, რომ ის წარმოდგენილი იყოს ჩამოსაშლელ ფანჯარაში, რათა ახალი ჩანაწერის ჩასმისას ველი ხელახლა არ ჩაიწეროს ველების სიაში. INSERT ბრძანების. თქვენ შეგიძლიათ დააინსტალიროთ იგივე ბირჟა შუამავლის გარეშე მაგიდების დაკეცვისას.

მოდით დავამატოთ ახალი ველი "მიღების თარიღი" Employees ცხრილში და დავარქვით HireDate და ვთქვათ, რომ ამ ველის დაბლოკვის მნიშვნელობა იქნება მიმდინარე თარიღი:

ALTER TABLE Employees ADD HireDate თარიღი NOT NULL DEFAULT SYSDATETIME()
თუ HireDate უკვე არსებობს, მაშინ შეგიძლიათ შეცვალოთ შემდეგი სინტაქსი:

ALTER TABLE თანამშრომლები ADD DEFAULT SYSDATETIME() FOR HireDate
აქ ობეჟენნიას სახელი არ ჩამიწერია, რადგან in vipadku DEFAULT, მე მქონდა იდეა, რომ ეს არც ისე კრიტიკულია. მაგრამ თუ თქვენ კეთილსინდისიერად მუშაობთ, მაშინ, ვფიქრობ, არ გჭირდებათ რიგში დაყენება და ნორმალური სახელის კითხვა. იბრძოლე ასე:

ALTER TABLE თანამშრომლები ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
თუ ადრე ამის არანაირი ნიშანი არ იყო, მაშინ, როდესაც დაამატებთ მას სკინ ჩანაწერში, უფრო ზუსტი თარიღი იქნება ჩასმული HireDate ველში.

ახალი ჩანაწერის დამატებისას, მიმდინარე თარიღი ავტომატურად იქნება ჩასმული, ასე რომ, ის ავტომატურად იქნება ჩასმული, თუმცა ჩვენთვის აშკარად შეუძლებელია ამის დაყენება. არ არის ნაჩვენები stovptsіv სიაში. იგი ნაჩვენებია აპლიკაციაში, თარგმანში HireDate ველის მითითების გარეშე, დამატებული მნიშვნელობა:

INSERT Employees(ID,Name,Email)VALUES(1004,N"Sergeev S.S."," [ელფოსტა დაცულია]")
ვნახოთ რა მოხდა:

აირჩიეთ * თანამშრომლებისგან

ID სახელი დაბადების დღე ელფოსტა პოზიციის ID დეპარტამენტის ID მენეჯერის ID Აყვანის თარიღი
1000 ივანოვი I.I. 1955-02-19 [ელფოსტა დაცულია] 2 1 NULL 2015-04-08
1001 პეტროვი პ.პ. 1983-12-03 [ელფოსტა დაცულია] 3 4 1003 2015-04-08
1002 სიდოროვი ს.ს. 1976-06-07 [ელფოსტა დაცულია] 1 2 1000 2015-04-08
1003 ანდრეევი ა.ა. 1982-04-17 [ელფოსტა დაცულია] 4 3 1000 2015-04-08
1004 სერგეევი ს.ს. NULL [ელფოსტა დაცულია] NULL NULL NULL 2015-04-08

CHECK კონვერტაცია მოწმდება ამ შემთხვევაში, თუ საჭიროა ველში ჩასმული მნიშვნელობის შეცვლა. მაგალითად, პერსონალის ნომრის ველზე ვდებთ გაცვლას, როგორც აბონენტის იდენტიფიკატორს (ID). ასეთი გაცვლის დასახმარებლად, ვთქვათ, რომ პერსონალის ნომრები და დამნაშავე დედები არის 1000-დან 1999 წლამდე:

ALTER TABLE Employees ADD CONSTRAINT CK_Employees_ID CHECK(ID BETWEEN 1000 and 1999)
ბირჟას თავისთავად ასე ჰქვია, ჯერ არის პრეფიქსი „CK_“, შემდეგ დავასახელებთ ცხრილს და ველის სახელს, იაკზე დაწესებულია საზღვარი.

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

INSERT Employees (ID, Email) VALUES (2000" [ელფოსტა დაცულია]")
ახლა ჩვენ ვცვლით მნიშვნელობას, რომელიც არის ჩასმული 1500-ით და ვცვლით ჩასადენ ჩანაწერს:

INSERT Employees (ID, Email) VALUES (1500" [ელფოსტა დაცულია]")
თქვენ ასევე შეგიძლიათ შექმნათ UNIQUE და CHECK გაცვლა სახელის მითითების გარეშე:

ALTER TABLE Employees ADD UNIQUE (ელფოსტა) ALTER TABLE Employees ADD CHECK (ID 1000-დან 1999 წლამდე)
მაგრამ ეს მაინც კარგი პრაქტიკაა და ჯობია ის მკაფიო ხედვის წინაშე დავდგეთ, რადგან რათა მოგვიანებით გავარკვიოთ, რა იქნება უფრო მნიშვნელოვანი, საჭირო იქნება ობიექტის ჩვენება და გაოცება, რაზეც ჩვენ გიპასუხებთ.

კარგი სახელით, ბირჟის შესახებ ბევრი ინფორმაციის ამოცნობა შესაძლებელია ამ სახელზე შუამავლის გარეშე.

მე, როგორც ჩანს, ყველა ბირჟის შექმნა შესაძლებელია ერთდროულად, როდესაც ცხრილები გაერთიანებულია, მაგრამ ეს ჯერ კიდევ შეუძლებელია. ვნახოთ ცხრილი:

DROP TABLE თანამშრომლები
І შესაძლებელია შექმნილი ბირჟებით її z usіma ხელახლა აშენება ერთი ბრძანებით CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, სახელი nvarchar(30), დაბადების თარიღი, ელფოსტა nvarchar(30), PositionID int, DepartmentID int, HireDate თარიღი NOT NULL ნაგულისხმევი SYSDATETIME(), -- DEFAULT i z(IDK_EmployeIDe) FOREIGN KEY (DepartmentID) REFERENCES განყოფილებები (ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCES პოზიციები (ID), CONSTRAINT UQ_Employees_ელფოსტა UNIQUE (ელფოსტა), CONSTRAINT BK_IDHEENCKID19(1)

INSERT Employees (ID,Name,Birthday,Email,PositionID,DepartmentID)VALUES (1000,N"Ivanov I.I.","19550219"," [ელფოსტა დაცულია]",2,1), (1001,N"Petrov P.P.","19831203"," [ელფოსტა დაცულია]",3,3), (1002,N"Sidorov S.S.","19760607"," [ელფოსტა დაცულია]",1,2), (1003,N"Andreev A.A.","19820417"," [ელფოსტა დაცულია]",4,3)

ბევრი არაფერია ინდექსების შესახებ, რომლებიც იქმნება, როდესაც საზღვრები გაერთიანებულია PRIMARY KEY და UNIQUE

როგორც სკრინშოტზე ხედავთ, როდესაც შეიქმნა PRIMARY KEY და UNIQUE საზღვრები, ინდექსები ავტომატურად იქმნებოდა იგივე სახელებით (PK_Employees და UQ_Employees_Email). ჩაკეტვისთვის, პირველადი გასაღების ინდექსი იქმნება როგორც CLUSTERED, ხოლო ინდექსი წყდება, როგორც NONCLUSTERED. ვარტო ამბობს, რომ კლასტერული ინდექსის გაგება აშშ-ს DBMS-ში არ არის. ცხრილს შეიძლება ჰქონდეს ერთზე მეტი კლასტერული (CLUSTERED) ინდექსი. დაჯგუფებული - ნიშნავს, რომ ცხრილის ჩანაწერები დალაგდება ამ ინდექსით, ასე რომ, შეიძლება ითქვას, რომ ამ ინდექსს შეუძლია ჰქონდეს პირდაპირი წვდომა ცხრილის ყველა მონაცემზე. ცხრილის სათავე ინდექსი. როგორ ვთქვა უფრო უხეში, ფასების ინდექსი, მაგიდაზე დაჭერა. კლასტერული ინდექსი - ეს კიდევ უფრო რთული ამოცანაა, რომელიც დაგეხმარებათ სასმელის ოპტიმიზაციაში, ახლა მხოლოდ გახსოვდეთ. როგორც გვინდა ვთქვათ, თუ კლასტერული ვიქტორისტის ინდექსი არ იყო პირველად გასაღებში, არამედ სხვა ინდექსში, მაშინ როდესაც პირველადი გასაღებები შერწყმულია დამნაშავესთან, მიუთითეთ NONCLUSTERED ვარიანტი:

ცხრილის_სახელის შეცვლა.
მაგალითად, გაცვლის ინდექსი PK_Employees არ არის კლასტერირებული, ხოლო გაცვლის ინდექსი UQ_Employees_Email არის კლასტერირებული. ჩვენამდე ვნახეთ შემდეგი ობეჟენია:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees ALTER TABLE Employees DROP CONSTRAINT UQ_Employees_Email
ახლა კი ჩვენ ვქმნით მათ CLUSTERED და NONCLUSTERED ვარიანტებით:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Employees ADD CONSTRAINT UQ_Employees_email UNIQUE CLUSTERED (ელფოსტა)
ახლა, როდესაც შეარჩიეთ არჩევანი Employees ცხრილებიდან, ჩვენ ვხედავთ, რომ ჩანაწერები დალაგებულია კლასტერული ინდექსის უკან UQ_Employees_Email:

აირჩიეთ * თანამშრომლებისგან

ID სახელი დაბადების დღე ელფოსტა პოზიციის ID დეპარტამენტის ID Აყვანის თარიღი
1003 ანდრეევი ა.ა. 1982-04-17 [ელფოსტა დაცულია] 4 3 2015-04-08
1000 ივანოვი I.I. 1955-02-19 [ელფოსტა დაცულია] 2 1 2015-04-08
1001 პეტროვი პ.პ. 1983-12-03 [ელფოსტა დაცულია] 3 3 2015-04-08
1002 სიდოროვი ს.ს. 1976-06-07 [ელფოსტა დაცულია] 1 2 2015-04-08

მანამდე თუ დაჯგუფებული ინდექსი იყო PK_Employees ინდექსი, სტანდარტული ჩანაწერები დალაგებულია ID ველის მიხედვით.

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

იყიდება dovіdnikіv მოვუწოდებთ dotsіlno, schob კლასტერული ინდექსი მოთხოვნა პირველადი გასაღები, tk. მოთხოვნებში ხშირად ვითხოვთ მძღოლის იდენტიფიკატორს otrimanna-სთვის, მაგალითად, დასახელებას (Plant, Viddilu). აქ ჩვენ ვვარაუდობთ, რაც ადრე დავწერე, რომ კლასტერულ ინდექსს შეუძლია პირდაპირი წვდომა ჰქონდეს მწკრივების ცხრილებზე და ვარსკვლავები ნათელია, რომ ჩვენ შეგვიძლია მივიღოთ სვეტის მნიშვნელობა დამატებითი მონაცემების გარეშე.

კლასტერული ინდექსი სავარაუდოდ სტაგნაციას განიცდის მორწყვამდე, რაც ყველაზე გავრცელებული არჩევანია.

ცხრილებში ინოდები ქმნიან გასაღებს სუროგატული ველისთვის, ღერძი, რომლისთვისაც იქმნება სუროგატი პირველადი გასაღები. შეინახეთ CLUSTERED index ვარიანტი უფრო დიდი სუროგატისთვის და მიუთითეთ NONCLUSTERED ვარიანტი სუროგატი პირველადი გასაღების შეჯერებისას.

ალბათ

ამ ეტაპზე ჩვენ გავეცანით გაცვლის ჩვეულებრივ ტიპებს, მათი უმარტივესი გზით, ისინი იქმნება ბრძანებით, როგორიცაა „ALTER TABLE im'ya_table_ADD CONSTRAINT im'ya_obrazhennia...“:
  • ᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ- მთავარი გასაღები;
  • ᲣᲪᲮᲝᲣᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ- Nalashtuvannya zv'yazkіv მე ვაკონტროლებ tіl_snostі მონაცემებს;
  • უნიკალური- საშუალებას გაძლევთ შექმნათ უნიკალურობა;
  • ᲩᲔᲙᲘ- საშუალებას გაძლევთ შეასწოროთ მონაცემთა შეყვანის სისწორე;
  • ნაგულისხმევი- საშუალებას გაძლევთ დააყენოთ საკეტის მნიშვნელობა;
  • ასევე, გაითვალისწინეთ, რომ ყველა ობიექტის ნახვა შესაძლებელია გამარჯვებული ბრძანებით ” ALTER Tableცხრილის_სახელი ვარდნის შეზღუდვა im'ya_obezhennya".
ასე რომ, ჩვენ ხშირად ვხვდებოდით ამ ინდექსებს და ვახარისხებდით კლასტერის ცნებებს ( დაჯგუფებული) და არაკლასტერული ( არაკლასტერული) ინდექსი.

დამოუკიდებელი ინდექსების შექმნა

თვითკმარობის პირობებში, აქ ისინი შრომობენ ინდექსებზე, რადგან ისინი შექმნილია PRIMARY KEY და UNIQUE-ის გაცვლისთვის.

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

CREATE INDEX IDX_Employees_Name ON Employees(Name)
ასევე აქ შეგიძლიათ მიუთითოთ ოპციები CLUSTERED, NONCLUSTERED, UNIQUE და ასევე შეგიძლიათ მიუთითოთ კანის ჩასმული ველის პირდაპირი დახარისხება ASC (დაბლოკვით) ან DESC:

შექმენით უნიკალური NONCLUSTERED INDEX UQ_Employees_EmailDesc ON Employees (ელფოსტა DESC)
არაკლასტერული ინდექსის შექმნის საათში, NONCLUSTERED ვარიანტი შეიძლება დაშვებული იყოს, რადგან არ იმუშავებს uvazі-ზე umovchannyam-ისთვის, აქ უბრალოდ არ იქნება ნაჩვენები, რომ დააკონკრეტოთ პუნქტის პოზიციები CLUSTERED და NONCLUSTERED ბრძანებაში.

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

DROP INDEX IDX_Employees_Name ON Employees
მარტივი ინდექსების შექმნა შესაძლებელია CREATE TABLE ბრძანების კონტექსტში, ისევე როგორც ინდექსი.

მაგალითად, მე შემიძლია კვლავ ვნახო ცხრილი:

DROP TABLE თანამშრომლები
І ის ხსნადია її ბირჟებისა და ინდექსების შექმნით ერთი CREATE TABLE ბრძანებით:

CREATE TABLE Employees(ID int NOT NULL, სახელი nvarchar(30), დაბადების დღის თარიღი, ელფოსტა nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDATE DEFAULT ), CONSTRAINNCESDDepartEYNDEFAULT ), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCES პოზიციები (ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (მენეჯერისID) REFERENCES Employees (ID), CONSTRAINT UQ_Employees (ID), CONSTRAINT UQ_EmployeesANDWEET00C.
Nasamkіnets ჩასმულია ჩვენი spіvrobіtnikіv ცხრილში:

INSERT Employees (ID, Name, Birthday, Email, PositionID, DepartmentID, ManagerID) VALUES (1000,N"Ivanov I.I.","19550219"," [ელფოსტა დაცულია]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [ელფოსტა დაცულია]",3,3,1003), (1002,N"Sidoriv S.S.","19760607"," [ელფოსტა დაცულია]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [ელფოსტა დაცულია]",4,3,1000)
დამატებითი varto მიუთითებს, რომ არაკლასტერულ ინდექსამდე შეგიძლიათ შეიტანოთ მნიშვნელობა їх-ის დამატებითი ჩანაწერის შემდეგ INCLUDE-ში. ტობტო. ამ შემთხვევაში, INCLUDE- ინდექსი უნდა იყოს კლასტერული ინდექსი, მაგრამ ახლა ეს არ არის ცხრილის დანართების ინდექსი, არამედ საჭირო მნიშვნელობები მიმაგრებულია ინდექსზე. ცხადია, ასეთმა ინდექსებმა შეიძლება ასევე გაზარდოს სასმელის პროდუქტიულობა თითო შერჩევით (SELECT), რადგან ყველა ველი ჩამოთვლილია ინდექსში, მაშინ შეიძლება არ დაგჭირდეთ ინდექსის ცხრილში დაბრუნება. Ale ce ბუნებრივად ხელს უწყობს ინდექსს, რადგან გადაცემული ველების მნიშვნელობები დუბლირებულია ინდექსში.

Virizka MSDN-დან.ზოგადი ბრძანების სინტაქსი ინდექსების შეჯამებისთვის

შექმენით [უნიკალური] [დაჯგუფებული | NONCLUSTERED] INDEX index_name ჩართულია (სვეტი [ ASC | DESC ] [ ,...n ]) [ INCLUDE (სვეტის_სახელი [ ,...n ]) ]

ალბათ

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

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

Visnovok shodo DDL

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

გოლოვნე - გაიგე არსი და რეშტა ივარჯიშე.

წარმატებებს გისურვებთ სასწაული მოძრაობის დაუფლებაში SQL სახელით.

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

SQL є, persh ყველაფრისთვის, ინფორმაციული და ლოგიკური ნაღმი, აღიარებულია დანაზოგის მონაცემების აღწერისთვის, მათი ანალიზისა და მოდიფიკაციისთვის. SQL არ არის ჩემი პროგრამირება. ერთბაშად ფილმის იმ კონკრეტული განხორციელების შესახებ, ხმა, მოიცავს სხვადასხვა პროცედურულ გაფართოებას.

Mova SQL є sukupnіstyu operatorsіv, yakі შეიძლება დაიყოს chotiri ჯგუფებად:

  • DDL (Data Definition Language) - მონაცემთა განსაზღვრის ოპერატორები
  • DML (Data Manipulation Language) - მონაცემთა მანიპულირების ოპერატორები
  • DCL (მონაცემთა კონტროლის ენა) - ოპერატორები მონაცემებზე წვდომისთვის
  • TCL (Transaction Control Language) - ტრანზაქციის მართვის ოპერატორები

SQL არის სტანდარტიზებული ჩემი. სტანდარტული SQL ინარჩუნებს ANSI სტანდარტების კომიტეტს (ამერიკული სტანდარტების ეროვნული ინსტიტუტი), რომელსაც აშკარად უწოდებენ ANSI SQL.

ბევრმა DBMS დეველოპერმა გააფართოვა SQL შესაძლებლობები ინსტრუქციებში დამატებითი ოპერატორების დამატებით. დამატებითი ფუნქციების განსახორციელებლად, ან მარტივი ოპერაციების განხორციელების გამარტივებისთვის საჭიროა მრავალი გაფართოება. მე მინდა ხშირად სუნი მეტი korisnі, tsі razshirennya pri'yazanі to sevnoї DBMS і იშვიათად podtremuyuyutsya მეტი nizh ერთი rozrobnik. ყველა შესანიშნავი DBMS და navit ti, თითქოს მათ შეეძლოთ გაფართოება, მხარს უჭერენ ANSI SQL-ს (უფრო დიდი და პატარა სამყარო). Okremі იმპლემენტაციები შესაბამისი სახელების ტარებისთვის (PL-SQL, Transact-SQL და ა.შ.). Transact-SQL (T-SQL) არის Microsoft-ის მიერ SQL Movie იმპლემენტაცია, რომელიც დაფუძნებულია SQL Server-ის კონცეფციაზე.

მოითხოვეთ მონაცემების შერჩევა (SELECT განცხადება)

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

შერჩევა

აირჩიეთ

პროდუქტიდან

აჩერებულ ოპერატორზე არჩეულია SELECT განცხადება, რათა შეარჩიოს ერთი სვეტი სახელწოდებით Description პროდუქტის ცხრილიდან. Im'ya stovptsya, shokaєtsya, zazuєєєєєДєєєєєєєєєєєєєєєєєєєєі ініні ініні საკვანძო სიტყვა SELECT და საკვანძო სიტყვა 'FROM' ნაჩვენებია ім'я მაგიდაზე, რომლისთვისაც არჩეულია მონაცემები.

ამ ტესტის გასაკეთებლად მენეჯმენტ სტუდიაში, მიჰყევით ამ ნაბიჯებს:

სტოვპცივის რაოდენობის შერჩევა

ჩანაწერების რაოდენობის ცხრილიდან ასარჩევად არჩეულია იგივე SELECT განცხადება. Vіdminnіst polagaє იმით, რომ საკვანძო სიტყვის SELECT შემდეგ აუცილებელია, ვისი მეშვეობითაც უნდა მიუთითოთ stovptsіv სახელების რაოდენობა.

SELECT, InStock

პროდუქტიდან

ყველა სტატიის შერჩევა

ვინაიდან შესაძლებელია stovptsіv-ის შერჩევა (თითო ნომერი თითო ნომერი), SELECT ოპერატორის დახმარებით, შეგიძლიათ მოითხოვოთ ყველა stovptsі, რომელიმე მათგანის ხელახლა არჩევის გარეშე. რისთვისაც სტოვპცივის სახელების შემცვლელად ჩასმულია ჯგუფის სიმბოლო „ზიროჩკა“ (*). წე ძარცვავენ ისე.

აირჩიეთ*

პროდუქტიდან

მონაცემთა დახარისხება

შერჩევის შედეგად, მონაცემები გამოჩნდება იმ თანმიმდევრობით, რომლითაც სუნი არის ცხრილებში. არჩეულთა ზუსტი დახარისხებისთვის, SELECT განცხადების დამატებით გამოიყენება წინადადება ORDER BY. ამ წინადადებებში იგი მითითებულია ერთი ან რამდენიმე სტოვპცივის სახელით, რისთვისაც აუცილებელია შედეგების დახარისხება. შეხედე შემდეგ დუნდულს.

პროდუქტიდან

შეუკვეთეთ InStock-ით

მაშასადამე, ის წინას იდენტურია, მინიშნებით ORDER BY წინადადებაზე, რადგან ის ეუბნება DBMS-ს დაალაგოს მონაცემები InStock სვეტის მნიშვნელობის ზრდის მიხედვით.

დახარისხება kіlkom stovptsami-ის მიხედვით

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

აირჩიეთ IdProd, , InStock

პროდუქტიდან

შეკვეთა InStock-ით,

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

შეამოწმეთ პირდაპირი დახარისხება

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

აირჩიეთ IdProd, , InStock

პროდუქტიდან

შეკვეთა InStock DESC-ით

საკვანძო სიტყვა DESC იშვიათად არის მითითებული იმ წერტილამდე, სადაც მითითებულია. წინა მარაგისთვის საკვანძო სიტყვა DESC მითითებული იყო InStock მარაგისთვის და არა აღწერისთვის. ამ თანმიმდევრობით, InStock სვეტი დალაგებულია ცვლილების მიხედვით, ხოლო აღწერა სვეტი არის დამატებითი თანმიმდევრობით (მიღებული როგორც ნაგულისხმევი).

SQL-ის ტრანზაქცია(როგორც მას უწოდებენ T-SQL) მონაცემთა ბაზა ( მონაცემთა ბაზა) პროცედურული ენის პროგრამირება, რომელიც უნდა იყოს მონოპოლიური მაიკროსოფტიდა გამარჯვებული SQL სერვერი.

პროცედურული ენის bula შექმნილია შესაძლებლობების გაფართოებისთვის SQLკარგი ინტეგრაციის შესაძლებლობით SQL. დამატებულია რამდენიმე ფუნქცია, როგორიცაა ლოკალური ცვლილებები და რიგების/მონაცემების დამუშავება. ფუნქციები ენის პოპულარიზაციისთვის ტურინგ-სრული (**).

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

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

2- ვუყურებ Transact-SQL

T-SQLბრძანების ბლოკებით ორგანიზებული, ერთი ბრძანების ბლოკი შეიძლება იყოს ჩასმული სხვა ბრძანების ბლოკში, ბრძანების ბლოკში, რომელიც იწყება დასაწყისიდა დაასრულეთ ᲓᲐᲡᲐᲡᲠᲣᲚᲘბლოკში არის ბევრი ბრძანება და არის კრემლში ბრძანებები, ერთი ერთში, წერტილით (;).

ბლოკის სტრუქტურა:

BEGIN -- ცვლადების გამოცხადება -- T-SQL განცხადებები END;

3- დაიწყეთ SQL Server Management Studio-ით

ამ სტატიაში მე გაჩვენებთ პროგრამირებას SQL სერვერი, ვიზუალურ ინსტრუმენტზე SQL Server Management Studio.

ცე ილუსტრაცია SQL Server Management Studioროდესაც ღიაა. Є დაკბილული კონდახი მონაცემთა ბაზათუ ხელახლა დააინსტალირებთ SQLServer.

ან შეგიძლიათ შექმნათ Learnsql , მცირე მონაცემთა ბაზა SQLServerზე ვებგვერდი .

დააჭირეთ მაუსის მარჯვენა ღილაკს მონაცემთა ბაზა, აირჩიეთ "ახალი შეკითხვა" schob vіdkriti vіkno for tsgogo მონაცემთა ბაზა.

მზად ხართ პროგრამისთვის მონაცემთა ბაზაSQL სერვერი.

ბრძანებების მარტივი ბლოკი ნაჩვენებია ქვემოთ, შეამოწმეთ 2 რიცხვის ჯამი:

დასაწყისი -- ცვლადის გამოცხადება Declare @v_Result Int; -- ცვლადის გამოცხადება 50 მნიშვნელობით Declare @v_a Int = 50; -- ცვლადის გამოცხადება 100 მნიშვნელობით Declare @v_b Int = 100; -- ამობეჭდეთ კონსოლი (დეველოპერისთვის). -- Cast გამოყენებით Int სტრიქონად გადაქცევისთვის -- + ოპერატორის გამოყენება 2 სტრიქონის შესაერთებლად Print "v_a= " + Cast(@v_a როგორც varchar(15)); -- ამობეჭდეთ Console Print "v_b=" + Cast(@v_b as varchar(15)); -- ჯამის ნაკრები @v_Result = @v_a + @v_b; -- ამობეჭდვა Console Print "v_Result=" + Cast(@v_Result as varchar(15)); დასასრული;

დააწკაპუნეთ ნიშანზე ბრძანებების ბლოკის გასაშვებად და გაოცდით შედეგით SQL Server Management Studio :

4- ძირითადი Transact-SQL ბრძანებები

4.1- If-elsif-else ბრძანება

Სინტაქსი:

თუ შემდეგ სამსახური 1; ᲓᲐᲐᲡᲠᲣᲚᲔ ᲗᲣ;

BEGIN -- გამოაცხადეთ ცვლადი DECLARE @v_Option მთელი რიცხვი; გამოაცხადეთ @v_Action varchar(30); SET @v_Option = 2; IF @v_Option = 1 SET @v_Action = "Run"; ELSE IF @v_Option = 2 BEGIN PRINT "სხვა ბლოკში, თუ @v_Option = 2"; SET @v_Action = "სარეზერვო"; ᲓᲐᲡᲐᲡᲠᲣᲚᲘ; ELSE IF @v_Option = 3 SET @v_Action = "Stop"; ELSE SET @v_Action = "არასწორია"; -- Logging PRINT "@v_Action=" + @v_Action; ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

კონდახის გაშვების შედეგი:

4.2- WHILE მარყუჟი

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

< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time loop execute, x increases by 1. SET @x = @x + 1; -- Every time loop execute, x decreases by 2. SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

კონდახის გაშვების შედეგი:

BEGIN - 2 ცვლადის გამოცხადება x და y DECLARE @x მთელი რიცხვი = 0; DECLARE @y მთელი რიცხვი = 10; -- ნაბიჯი DECLARE @step integer = 0; -- სანამ @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, y decreases by 1 SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); -- If @x >2 შემდეგ გამოდით ციკლიდან -- (თუმცა WHILE-ის პირობები მაინც მართალია). IF @x > 2 შესვენება; ᲓᲐᲡᲐᲡᲠᲣᲚᲘ; -- ჩაწერეთ ჟურნალი PRINT "x,y = "+ CAST(@x AS varchar(10)) + "," + CAST(@y AS varchar(10)); ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

კონდახის გაშვების შედეგი:

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

BEGIN - გამოცხადდება 2 ცვლადი x და y. გამოაცხადეთ @x მთელი რიცხვი = 0; DECLARE @y მთელი რიცხვი = 10; -- ნაბიჯი DECLARE @step integer = 0; -- სანამ @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, x decreases by 2 SET @y = @y - 2; -- If @x < 3 , then skip the statements below -- And continue new step IF @x < 3 CONTINUE; -- If @x < 3 the statements below "CONTINUE" will not be run. PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

5- შეცვლამდე მიამაგრეთ მონაცემები მოთხოვნაზე

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

Assign_Value_Example

BEGIN - ცვლადის გამოცხადება @v_Emp_ID DECLARE @v_Emp_ID მთელი რიცხვი = 1; გამოაცხადეთ @v_First_Name varchar(30); განაცხადე @v_Last_Name varchar(30); გამოაცხადეთ @v_Dept_ID მთელი რიცხვი; -- ცვლადებს მიეცით მნიშვნელობები SELECT @v_First_Name = emp.First_Name, @v_Last_Name = emp.Last_Name, @v_Dept_Id = emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID = @v_Emp -- ამობეჭდეთ მნიშვნელობები PRINT " @v_First_Name = " + @v_First_Name; PRINT " @v_Last_Name = " + @v_Last_Name; PRINT "@v_Dept_Id = " + CAST(@v_Dept_ID AS varchar(15)); ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

კონდახის გაშვების შედეგი:

6- განსაკუთრებით იხილეთ მონაცემები T-SQL-ში

6.1- მონაცემთა TABLE-ის ნახვა (იმპლიცტური ხედი)

T-SQLმე გაძლევთ ხმოვანი ცვლილებების გარეგნობის საშუალებას მაგიდა.

Სინტაქსი:

განსაზღვრეთ TABLE ტიპის ცვლადი. -- შენიშვნა: კონსულტაციები შეიძლება ასევე დაექვემდებაროს შემდგომ კონსულტაციას (იხ. მაგალითი). გამოაცხადეთ @v_variable_name TABLE(Column1 DataType1, Column2 DataType2);

პარამეტრის მინიჭება TABLE ტიპისთვის. გამოაცხადეთ @v_Table TABLE (First_Name Varchar(30), Last_Name Varchar(30), Dept_ID Integer, ხელფასის ათწილადი); -- დამცველებს ასევე შეუძლიათ მიიღონ იგივე ბედი, როგორც მეორადი: გამოაცხადონ @v_table TABLE (პროდუქტის_ID მთელი რიცხვის IDENTITY(1,1) PRIMARY KEY, Product_Name DataType2 NOT NULL ნაგულისხმევი ("უცნობი"), ფასის ფულის შემოწმება (ფასი< 10.0));

მაგალითი: ჩადეთ მონაცემები შესაცვლელად მაგიდა.

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

წაშლააშკარად მაგიდა:

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

დაიწყეთ განცხადება @v_Emp_ID მთელი რიცხვი = 1; -- გამოაცხადეთ TABLE ტიპის ცვლადი. გამოაცხადეთ @v_Table TABLE (First_Name varchar(30), Last_Name varchar(30), Dept_Id მთელი რიცხვი, ხელფასი float DEFAULT 1000); -- ვარიანტი INSERT INTO განცხადება @v_Table-ში მონაცემების ჩასართავად. INSERT INTO @v_Table (First_name, Last_Name, Dept_ID) SELECT emp.First_Name, emp.Last_Name, emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID< 4; -- Update @v_Table UPDATE @v_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query @v_Table. SELECT * FROM @v_Table; END;

კონდახის გაშვების შედეგი:

6.2- მონაცემთა ხედის TABLE (გამოკვეთილი ხედი)

T-SQLნებას გაძლევთ გაახმოვანოთ vidi ცვლილება მაგიდაარაპირდაპირი გზით. ცვლილების სახელწოდება იწყება # .

BEGIN -- SELECT INTO სტატიების სია #v_My_Table-ში მონაცემების შეყვანამდე. SELECT emp.First_Name, emp.Last_Name, emp.Dept_Id, 1000 ხელფასი INTO #v_My_Table FROM Employee Emp WHERE Emp.Emp_ID< 4; -- Update #v_My_Table UPDATE #v_My_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query #v_My_Table. SELECT * FROM #v_My_Table; END;

კონდახის გაშვების შედეგი:

7- კურსორი

7.1- რა არის კურსორი?

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

7.2- კურსორის ხმა

Სინტაქსი

ISO სინტაქსი DECLARE cursor_name [ insensiTIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR ( READ ONLY | UPDATE [ OF column_name [ ,...n ] ] ] ] [ ] -- Transact-SQL Extended Syntax LOCCURS კურსორი გლობალური] [FORWARD_ONLY | გადახვევა] [სტატიკური | კლავიატურა | დინამიური | FAST_FORWARD] [ READ_ONLY | SCROLL_LOCKS | ოპტიმისტური ] [ TYPE_WARNING ] არჩევის_განცხადებისთვის [ განახლებისთვის [ სვეტის_სახელის [ ,...n ] ] ] [;]

7.3- მარაგი კურსორით

გამოიყენეთ Learnsql; BEGIN -- -- გამოაცხადეთ ცვლადი: DECLARE @v_Emp_ID მთელი რიცხვი; განაცხადე @v_First_Name varchar(50); გამოაცხადეთ @v_Last_Name varchar(50); გამოაცხადეთ @v_Count მთელი რიცხვი; -- გამოაცხადეთ კურსორი. DECLARE My_Cursor CURSOR FOR SELECT Emp.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME FROM Employee Emp WHERE Emp.EMP_ID< 3; -- Open Cursor OPEN My_Cursor; -- Move the cursor to the first record. -- And assign column values to variables. FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE My_Cursor; DEALLOCATE My_Cursor; END;

კონდახის გაშვების შედეგი:

7.4- მატჩის კონდახი კურსორისკენ

გამოიყენეთ Learnsql; BEGIN -- -- გამოაცხადეთ ცვლადი: DECLARE @v_Emp_ID მთელი რიცხვი; განაცხადე @v_First_Name varchar(50); გამოაცხადეთ @v_Last_Name varchar(50); -- კურსორის ცვლადის გამოცხადება. გამოაცხადეთ @My_Cursor CURSOR; -- დააყენეთ Select განცხადება CURSOR ცვლადისთვის. დააყენეთ @My_Cursor = CURSOR FOR SELECT Emp.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME FROM Employee Emp WHERE Emp.EMP_ID< 3; -- Open Cursor OPEN @My_Cursor; -- Move the cursor to the first line. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE @My_Cursor; DEALLOCATE @My_Cursor; END;

შედეგები ასახავს მაგალითს:

8- გამორთვა

პროგრამირებისას T-SQLთქვენ შეგიძლიათ გქონდეთ შეწყალება თქვენი კოდისთვის, მაგალითად, შეწყალება, როდესაც მას 0-ზე დააყენებთ. წინააღმდეგ შემთხვევაში, თუ შეწყალების ჩასმას, თუ ჩაწერის ჩასმას, მაშინ მნიშვნელობას აკოპირებთ პირველადი გასაღებით, ... გჭირდებათ ამ მდგომარეობის გამოსასწორებლად.

გაოცდით უბრალო უკანალით, როგორ გამოვასწოროთ შეწყალება ერთი საათის განმავლობაში 0-ზე.

TryCatch_Example

გამოიყენეთ Learnsql; BEGIN -- -- გამოაცხადეთ ცვლადი: DECLARE @v_a float = 20; გამოაცხადეთ @v_b float = 0; გამოაცხადეთ @v_c float; გამოაცხადეთ @v_Error_Number მთელი რიცხვი; -- გამოიყენეთ BEGIN TRY .. END TRY ჩეთის შეცდომებისთვის. -- როგორ მივიღოთ შეწყალება ამ ბლოკისთვის -- თქვენ გადახვალთ BEGIN CATCH .. END CATCH ბლოკზე. დაიწყეთ ცდა --- PRINT "@v_a=" + CAST(@v_a AS varchar(15)); PRINT " @v_b = " + CAST(@v_b AS varchar(15)); -- გაყავით 0 შეცდომაზე, იოგას გამო. SET @v_c = @v_a / @v_b; -- ამ ხაზის ქვემოთ არ გაშვებული იქნება. -- პროგრამის გადასვლა დასაბლოკად BEGIN CATCH .. END CATCH PRINT "@v_c=" + CAST(@v_c AS varchar(15)); END TRY -- BEGIN CATCH .. END CATCH thrash bootie მოთავსებულია უშუალოდ BEGIN TRY .. END TRY . BEGIN CATCH - შეცდომის ნომერი. SET @v_Error_Number = ERROR_NUMBER(); -- ამობეჭდეთ შეცდომის ნომერი: PRINT "შეცდომის ნომერი: " + CAST(@v_Error_Number AS varchar(15)); -- შეცდომის შეტყობინება: PRINT "შეცდომის შეტყობინება: " + ERROR_MESSAGE(); -- წინა შეცდომა: PRINT "შეცდომის სიმძიმე: " + CAST(ERROR_SEVERITY() AS varchar(15)); -- შეცდომის მდგომარეობა: PRINT "შეცდომის მდგომარეობა: " + CAST(ERROR_STATE() AS varchar(15)); -- ხაზის ნომერი: PRINT "შეცდომის ხაზი: " + CAST(ERROR_LINE() AS varchar(15)); -- პროცედურის (ან ფუნქციის, ან ტრიგერის) დასახელება. PRINT "შეცდომის პროცედურა: " + ERROR_PROCEDURE(); END CATCH; ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

შედეგი

შეწყალების შესახებ ინფორმაცია:

ფუნქცია აღწერა
ERROR_NUMBER() ჩართეთ შეწყალების ნომერი.
ERROR_MESSAGE() შეწყალების შესახებ მოგიყვებით. შეტყობინებები მოიცავს პარამეტრებს, როგორიცაა თარიღი, ობიექტის სახელი ან საათი.
ERROR_SEVERITY() გადაუხვიე შეწყალების სერიოზულობის ნაკადი.
ERROR_STATE() შეწყალების სტატუსის შეცვლა.
ERROR_LINE() გადააქციეთ რიგის ნომერი შეწყალების კოდზე
ERROR_PROCEDURE() სახელის როტაცია შენახული პროცედურაან გამომწვევი, დე გახდა შეწყალება

9- ფუნქცია

იაკ პროცედურა(პროცედურა), ფუნქცია(ფუნქცია) - ბრძანებები T-SQL, მთავარი როლის შესაცვლელად პროცედურის ხედვისას ფუნქცია აბრუნებს მნიშვნელობას კვირის საათის მიხედვით.
ფუნქციის შენახვა ასევე შესაძლებელია მონაცემთა ბაზადანახვაზე შენახვის პროცედურა.

საქაღალდის სინტაქსი ფუნქცია(ფუნქციები).

ფუნქციის_სახელი: -- არგუმენტი: -- რეჟიმი: INPUT, OUTPUT, ნაგულისხმევი INPUT -- მონაცემთა ტიპი: CREATE FUNCTION ([ @argument1 datatype1 , @argument2 datatype2 , ... ]) აბრუნებს მონაცემთა ტიპს AS BEGIN -- ცვლადების გამოცხადება -- განცხადებები -- დაბრუნების მნიშვნელობა END;

ფუნქცია პარამეტრებით CREATE FUNCTION Sum_Ab(a მთელი, b მთელი რიცხვი) RETURNS მთელი რიცხვი AS დააწკაპუნეთ დაბრუნება a + b; დასასრული; -- ფუნქცია პარამეტრების გარეშე CREATE FUNCTION Get_Current_Datetime() RETURNS თარიღი, როგორც დასაწყისი დაბრუნების CURRENT_TIMESTAMP; დასასრული;

ჩამოშვების ფუნქცია:

ჩამოშვების ფუნქცია DROP FUNCTION ; -- კონდახისთვის: DROP FUNCTION My_Function;

კონდახის დასაკეცი ფუნქციები:

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

  1. შექმენით ფუნქცია
  2. კომპილაციის ფუნქცია
  3. ფუნქციის დაწყება

ფუნქციის შენახვა - როგორც კი განხორციელდება, უნდა შეიცვალოს თანმიმდევრობით, შექმნილი ახლისთვის. IF OBJECT_ID(N"dbo.My_Sum", N"FN") არ არის NULL DROP FUNCTION My_Sum; GO CREATE FUNCTION My_Sum (@p_a float, @p_b float) აბრუნებს float AS BEGIN - ცვლადის ტიპის გამოცხადება Float DECLARE @v_C float; -- მიანიჭეთ მნიშვნელობა v_C SET @V_C = @p_A + @p_B; -- დაბრუნების მნიშვნელობა. დაბრუნება @v_C; ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

დააწკაპუნეთ ნიშანზე ფუნქციის შესასრულებლად.

ფუნქცია, როგორც თქვენ შექმენით, არის მარტივი ფუნქცია, რომელიც აბრუნებს Scalar-მნიშვნელობას. შეგიძლიათ ისაუბროთ იმაზე, თუ როგორ ხდება ეს SQLServer Management Studio:

თქვენ შეგიძლიათ გააპროტესტოთ ფუნქცია მაუსის მარჯვნივ დაჭერით, აირჩიეთ:

  • სკრიპტის ფუნქცია -> SELECT to -> New Query Editor Window

შეამოწმეთ ტესტის ველი, შეგიძლიათ შეცვალოთ პარამეტრის მნიშვნელობა:

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

ფუნქციებს შეუძლია გუნდის ბედი აირჩიეთ.

აირჩიეთ acc.account_id, acc.cust_id, acc.avail_balance, acc.pending_balance, dbo.MY_SUM(acc.avail_balance, acc.pending_balance) ბალანსი FROM ანგარიშის acc;

SQL შეკითხვის შედეგი:

10- პროცედურა

სარდლობის ჯგუფი T-SQL, რომელიც შეიძლება შეირჩეს პროცედურაში (პროცედურში), ასე რომ თქვენ შეგიძლიათ გაზარდოთ ვიკონინგის შესაძლებლობა, სამარცხვინო კორესტუვანია, უსაფრთხოება, მონაცემთა უსაფრთხოება, ასეთი გვირგვინი განვითარებაში.

პროცედურების შენახვა შესაძლებელია მონაცემთა ბაზა yak ობიექტი u მონაცემთა ბაზამზად არის ხელახალი ვიზიტისთვის. პროცედურას ეწოდება გადამდები შენახვის პროცედურა. შობ ვიკონატი შენახვის პროცედურა, შენახვისთანავე შენახვის პროცედურა, stinks შედგენილია p-კოდირომელიც შეიძლება წაახალისოს ვიკონანნიმ.

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

სინტაქსი დახურვის პროცედურისთვის:

პროცედურის_სახელი: -- არგუმენტი: -- რეჟიმი: შეყვანის ტიპი: INPUT ან OUTPUT, ნაგულისხმევი არის INPUT -- მონაცემთა ტიპი: -- შენიშვნა: არჩევითი პარამეტრები შეიძლება შეიყვანოთ () ან არასაჭირო. პროცედურების შექმნა [ argument1 datatype1 , argument2 datatype2 , ... ] AS BEGIN -- ცვლადების გამოცხადება. - განცხადებები .. დასასრული; -- ან: შექმენით პროცედურა ([ argument1 datatype1 , argument2 datatype2 , ... ]) AS BEGIN - ცვლადების გამოცხადება. - განცხადებები .. დასასრული;

პროცესი პარამეტრების გარეშე. CREATE პროცედურა Do_Something AS Begin - გამოაცხადეთ ცვლადები აქ. გამოაცხადეთ @v_a მთელი რიცხვი; -- აქ გააკეთე რამე -- .... დასასრული; -- პროცედურა პარამეტრებით -- 1 შეყვანის პარამეტრი და 2 შეყვანის პარამეტრი CREATE Procedure Do_Something (@p_Param1 Varchar(20), @v_Param2 Varchar(50) OUTPUT) AS Begin -- ცვლადების გამოცხადება Declare @v_a Integer; -აქ გააკეთე რამე. -- ...Დასასრული;

ჩამოშვების პროცედურა:

ჩამოშვების პროცედურა: ვარდნის პროცედურა

კროკი ვიკონანის პროცედურისთვის:

დასაკეცი პროცედურის მაგალითი:

Get_Employee_Infos

ჩამოაგდეთ პროცედურა Get_Employee_Infos, თუ ის უკვე არსებობს. -- (ხელახალი შექმნის ჩასართავად) IF OBJECT_ID(N"dbo.Get_Employee_Infos", N"P") IS NULL DROP PROCEDURE Get_Employee_Infos; GO -- პროცედურა შეყვანის პარამეტრით: p_Emp_Id -- და გამომავალი: v_First_Name, v_Last_Name, v_Dept_Id. პროცედურების შექმნა Get_Employee_Infos (@p_Emp_Id მთელი რიცხვი, @v_First_Name varchar(50) OUTPUT, @v_Last_Name varchar(50) OUTPUT, @v_Dept_Id მთელი რიცხვი OUTPUT) -- გამოიყენეთ string to Converte (Varte). -- გამოიყენეთ + ოპერატორი ორი სტრიქონის შესაერთებლად. PRINT "პარამეტრი @p_Emp_Id = " + CAST(@p_Emp_ID AS varchar(15)); -- -- მოითხოვეთ მონაცემები, როგორიცაა ცხრილი და მიანიჭეთ მნიშვნელობები ცვლადებს. -- აირჩიეთ @v_First_Name = Emp.First_Name, @v_Last_Name = Emp.Last_Name, @v_Dept_Id = Emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_Id = @p_Emp_Id; -- -- შესვლა (დეველოპერებისთვის). - PRINT "ნაპოვნი ჩანაწერი!"; PRINT " @v_First_Name= " + @v_First_Name; PRINT " @v_Last_Name= " + @v_Last_Name; PRINT "@v_Dept_Id=" + CAST(@v_Dept_Id AS varchar(15)); ᲓᲐᲡᲐᲡᲠᲣᲚᲘ;

  • მარკ ა შენახვის წერტილიგარიგებაში: შეინახეთ ტრანზაქციის სახელი_შენახვის წერტილი
  • @@transcountცვლადი: დანიშნული ტრანზაქციის ნომერი მოსაგებად (არ დასრულებულა უკან დაბრუნებასთან ან ჩაბარებასთან ერთად) სტრიმინგ სესიაში.
    1. ბრძანება rollback trans + tên_của_savepointდაეხმარეთ ტრანზაქციის საბოლოო პოზიციაზე დაბრუნებას შენახვის წერტილი(დასრულებული ტრანზაქციების ეფექტის გარეშე), დაბლოკვა (დაბლოკვა) განბლოკილი იქნება (განბლოკვა), როდესაც მანიპულირება დასრულდება. უკან დაბრუნებასიმღერის ელემენტები.
    2. აშკარა აშკარა ტრანზაქციის შემთხვევაში, აუცილებელია გადახედოს, რომელიც შეიძლება დარიცხული იყოს ( უკან დაბრუნება) ან დაფიქსირდა აშკარა ხედზე ( ჩაიდინოს), თუმცა არა, გარიგებაგანაგრძეთ სესხება და ისეთი რესურსების აღება, რაც სხვებს დაეხმარება გარიგებები.
    3. ბრძანება უკან დაბრუნებადაეხმარეთ მონაცემთა ბაზაში მხოლოდ ტრანზაქციების მითითებას ( ჩასმა, წაშლა, განახლება). სხვა ბრძანებები, მაგალითად, მიმაგრება, არ დევს ბრძანებაში უკან დაბრუნება.

    Transaction_Example1

    BEGIN -- რომელ დანამატს აქვს ანგარიშები ACCOUNT_ID = 1, 2 db ამ დროს, შეგიძლიათ მონაცემების გამოკლება ტრანზაქციის დაწყების შემდეგ გადამოწმებამდე -- -- ანგარიში A (უკვე გარანტიები არსებობს DB-ში) გამოაცხადეთ @Account_Id_A inte 1 ; -- ანგარიში B (უკვე გარანტიები არსებობს DB-ში) DECLARE @Account_Id_B მთელი რიცხვი = 2; -- Amount DECLARE @Amount float = 10; -- ბანკი DECLARE @Execute_Branch_Id მთელი რიცხვი = 1; -- ჩაწერეთ ტრანზაქციის რაოდენობა. -- ძალაშია, ამ საათში არანაირი ტრანზაქცია არ არის და PRINT "@@TranCount = " + CAST(@@Trancount AS varchar(5)); PRINT "გარიგების დაწყება"; -- ტრანზაქციის დაწყება BEGIN TRAN; - შეცდომის დაჭერა. დაიწყეთ ცდა -- -- გამოვაკლოთ 10$ ანგარიშში. განაახლეთ ანგარიშის ნაკრები AVAIL_BALANCE = AVAIL_BALANCE - @Amount WHERE Account_Id = @Account_Id_A; -- -- ჩადეთ ტრანზაქციის ინფორმაცია Acc_Transaction ცხრილში. ACC_Transaction- ის ჩასმა (TXN_TATE, FUNDS_AWAIL_DATE, TXN_TYPE_CD, Account_Im, excround_branch_id) ღირებულებები (CURRENT_TIMESTAMP_ID) ფასეულობები (CURRENT_TIMESTAMP, "CDTMESTAMP," CDT ", @ACCOUNT_ID_A - - დაამატეთ $ 10 ანგარიშზე B. განახლების ანგარიშის კომპლექტი @Amail_Balance = avail_balance + -- ჩადეთ ტრანზაქციის ინფორმაცია Acc_Transaction ცხრილში. INSERT INTO ACC_TRANSACTION (TXN_DATE, FUNDS_AVAIL_DATE, TXN_TYPE_CD, ACCOUNT_ID, AMOUNT, EXECUTION_BRANCH_ID) VALUES (CURRENT_TIMESTAMP_Transaction, CURRENT_TIMESTAMP_, CURRENT, @, CURRENTI TRANSACTION, CURRENT_TIMESTAMP_, CURRENT; ტრანზაქციის დადება"; COMIT TRAN; END TRY -- თუ იცით, რომ შეწყალების Catch ბლოკი შესრულდება. BEGIN CATCH PRINT "Error:" + ERROR_MESSAGE(); PRINT "Error -> Rellback Transaction"; IF @@ Trancount > 0 ROLLBACK TRAN;END CATCH;END;

    კონდახის გაშვების შედეგი:

    12-ტრიგერი

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

    • TODO ლინკი!