ტრიგერები: შექმნა და გამოყენება. იწვევს მარტივი MS SQL ტრიგერების მაგალითებს

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

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

მათზე მუშაობა, ერთი ღირებული გამოცდილება განხორციელდა - პრიორიტეტებისა და სტატისტიკის დაცვა. Რას ნიშნავს? ყველაფერი მარტივია: თუ თქვენ გაქვთ ბლოგი და მას აქვს 2-3-4-10012 მილიონი ვიზიტორი დღეში, და სტატიები დაწერილია მხოლოდ 1-2-3435 ჯერ დღეში (ბრძანების რაოდენობა ნაკლებია, ვიდრე თვალსაზრისით) , მაშინ სტატიის (და ამ სირთულის შენარჩუნების სიჩქარე სტატიის მითითების სიჩქარით შეიძლება იყოს პროპორციულად. მეტი შოუ, შოუ არის შოუ, და არა შენარჩუნება სტატია / გვერდი / მაგიდა. რა არ ნიშნავს იმას, რომ შესაძლებელია დაისვენოთ. სტატიის შენარჩუნება 3-5-10 წამში დღიურში არის ადეკვატურობის ფარგლებში, მაგრამ გვერდი 2 წამში (+ ხოლო სკრიპტებისა და სტილის სურათების გადაღება) - ეს არის ზღვარზე "რა გაბრაზებული საიტი, მე წაიკითხა რაღაც სხვა", და უარესი, მე წავიდეთ ყიდვა სხვა ადგილას. "

თუ ჩვენ ვიღებთ საშუალოდ კენჭისყრას კენჭისყრას / კარმას, კომენტარს, გვერდის მეტრს და ა.შ., მაშინ ბევრი დეველოპერები მოდიან დიზაინების მსგავსად, როგორიცაა კომენტარი (*) კომენტარში, სადაც კომენტარს აკეთებს. Page \u003d page_id. კარგად, ვიფიქროთ თითოეულ სტატიაში, რათა გამოვთვალოთ რეიტინგის რაოდენობა, კომენტარების ოდენობა. ჩვენ გვაქვს ჩვენი ძირითადი სტატიები თითოეული სექციიდან. როდესაც დასწრება 10 ადამიანი წამში, საშუალოდ VPS- ზე, თქვენ შეგიძლიათ დაუშვას საკუთარ თავს 60-100 SQL queries თითო გვერდზე (Hello, Bitrix).

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

მაგიდის ბლოგი.

შექმენით მაგიდა, თუ არ არსებობს `დღიური` (id` id (11) არ არის null auto_increment,` title `varchar (128) არ არის ,` ტექსტის` ტექსტი არ არის , `შექმნის` datetime არ არის ,` მოდიფიკაცია` datetime , 'img` varchar (128) არ არის null default "default.png", `სტატუსი` taryint (4) არ არის null default" 2 ",` `user_id` 11) არ არის ,` `int` 11) არ არის , `relax_type` Tinyint (4) არ არის ,` timers` timestamp not null default current_timestamp, `contest` taryint (1) არ null default "0", `views` 11) არ არის null default" 0 ",` კომენტარი ` int (11) არ არის , `url` varchar (128) არ , პირველადი გასაღები (` id`), უნიკალური გასაღები `url` (` url`), გასაღები `country_id` (` country_id`), გასაღები` user_id ` (`user_id`), გასაღები` სტატუსი` (`სტატუსი`)) ძრავის \u003d innodb default charset \u003d utf8 auto_increment \u003d 1456435;

კომენტარები მაგიდა

შექმნა მაგიდა თუ არ არსებობს `კომენტარი` (` `` `` `` `` `` `_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ `Int (12) default ,` text`te, `შექმნა` timestamp null default current_timestamp,` სტატუსი` int (1) არ არის null default "0", პირველადი გასაღები (id`), გასაღები `owname` (` მფლობელი_ სახელი `,` მფლობელი _id`), გასაღები `parent_id` (` parent_id`)) ძრავის \u003d myisam default charset \u003d utf8 auto_increment \u003d 243254252;

როგორც ხედავთ, ბლოგზე მაგიდასთან, თითოეულ სტატიას აქვს კომენტარი Counter (კომენტარი ველი).
მარტივი პრაქტიკა:
1. დასძინა კომენტარი - გაიზარდა Counter ბლოგი
2. ამოღებულია / დაიმალა კომენტარი - შემცირდა counter.
ამის გაკეთება კოდში არის მოსახერხებელი და ჩვეულებრივი, მაგრამ არსებობს უფრო მოსახერხებელი ინსტრუმენტი - იწვევს.

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

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

კომენტარის შექმნა:

შექმენით გამოიწვევს ar_count_comment `` admer_count_comment` თქვენი კომენტარების ჩასმა თითოეული რიგისთვის დასაწყისი // მომხმარებლის პერსონალურ ანგარიშზე მე მიმაჩნია, თუ რა კომენტარს აკეთებს დაწერა UPDATE User Set User.CountComment \u003d User.CountComment + 1 სადაც user.id \u003d new.user_id; // განსაზღვრა, თუ რა კომენტარს ეხება და დაუყოვნებლივ გაზრდის Counter- ს მონაცემების ცხრილებში. `.Id \u003d new.owner_id`; როდესაც "სტატიაში" შემდეგ განაახლეთ`` `article`.` კომენტარი` \u003d `` `` `` `` `` `` `` `` ` როდესაც "populattlaceplace" შემდეგ განახლებას "populate_place" მითითებული `populate_place`.` კომენტარი` \u003d `populate_place`.` კომენტარი` + 1, სადაც `populate_place``` new.`owner_id` ბოლოს შემთხვევაში; // აქ ჩვენ ხელს შეუწყობს თქვენი სამუშაო სიახლეები ribbons // URL სტატიები თქვენ დაუყოვნებლივ დაწერეთ, ასე რომ მაშინ არ გააკეთოთ ნიმუშების არასასურველი საქმე New.Oneser_name "როდესაც" ბლოგი "შემდეგ Seterurl \u003d (აირჩიეთ url` დღიური`, სადაც` დღიური `id \u003d new.owner_id`; როდესაც "მუხლი" შემდეგ მითითებული Uperurl \u003d (აირჩიეთ url \\ article`, სადაც მუხლი.და \u003d new.owner_id`; როდესაც "populateplace" შემდეგ მითითებული userurl \u003d ``; ბოლოს შემთხვევაში; / / სტატიის სახელი დაუყოვნებლივ წერილობით, ასე რომ, თუ არ გააკეთოთ ნიმუშის ნიმუში New.owner_name "რა" ბლოგი "შემდეგ მითითებული Usertitle \u003d (აირჩიეთ სათაური` დღიური`wer_id`d`; როდესაც "სტატიაში" შემდეგ მითითებული Usertitle \u003d (აირჩიეთ სათაური \\ article` სადაც მუხლი.და \u003d new.owner_id`; როდესაც "populateplace" შემდეგ მითითებული Usertitle \u003d ``; ბოლოს შემთხვევაში; Insert შევიდა ushas_events ღირებულებები (new.user_id, new.id, "კომენტარები", ახლა (), userurl, Usertitle); Დასასრული.

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

შექმნა Trigger `del_count_comment` შემდეგ წაშლა` კომენტარი` თითოეული row დაიწყება განახლება მომხმარებლის კომპლექტი user.countcomment \u003d user.countcomment -1 სადაც user.id \u003d old.user_id; საქმე Old.Onger_name "რა" ბლოგს "შემდეგ განაახლეთ` დღიური```````` `დღიური`.` კომენტარი` - 1, სადაც` დღიური`იდსი` \u003d ძველი. 'nover_id`; როდესაც "სტატიის" სტატიის "სტატიის" სტატიის განახლება "` კომენტარი` (`` `` `` `` `` `- 1` `` `` `` `` როდესაც "POSTUTEPLAPPLAPLAY" შემდეგ განახლდება` populate_place_place` '' populate_place` ' ბოლოს შემთხვევაში; Დასასრული.

და რა მიიღო:
1. კომენტარის ჩასმისას, ჩვენ ავტომატურად ვიყენებთ SQL Server- ს, კონკრეტულ კომენტარში კომენტარების ოდენობას (სტატია, გვერდი, შენიშვნები)
2. ჩვენ ჩამოყალიბდა სიახლეები (გამარჯობა ყველა სოციალურ ქსელზე და ა.შ.)
3. როდესაც კომენტარი წაიშლება, ჩვენ გვაქვს ყველა მონაცემის გამოქვითვა.
4. ჩვენ არ გამოვიყენეთ ჩარჩო.
5. ყველა საჭირო მონაცემების ნიმუში ხდება სწრაფად (მხოლოდ 1 მოთხოვნა, როდესაც გვერდი გამოჩნდება, გარდა სხვა "მარცხნივ" მონაცემებით.

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

დამატებულია Trigger:

შექმენით Trigger `ins_blog`, სანამ ჩასმა" ბლოგზე "// ჩადება ჩაწერეთ მონაცემების" ჩანაცვლების "მიერ ინფორმაციის დაზოგვა. თითოეული რიგისთვის დაიწყება ახალი New.modification \u003d ახლა (); Დასასრული.

ბოლო წუთში ნიმუშის გაკეთება ჩვენ ბოლო წუთს დაემატება ყველა დოკუმენტს.

შექმნის Trigger `ins_blog` სანამ განახლება` დღიური` // ჩადება ჩადება ჩადება ჩაწერეთ ინფორმაციის დაზოგვა მონაცემების" ჩანაცვლების "მიერ. თითოეული რიგისთვის დაიწყება ახალი New.modification \u003d ახლა (); Დასასრული.

მონაცემების შეცვლისას, ძებნის ინდექსს განაახლებს.

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

UPD: DB სტრუქტურის გართულების მიზანშეწონილობასთან დაკავშირებით ქოლივარია ღიაა.

გამოიწვევს:

<Определение_триггера>:: (შექმნა | alter) trigger_trigger სახელი (name_table | ბეჭდვის სახელი) ((for | ნაცვლად | ნაცვლად) ([წაშლა] [ჩადეთ] [Idvate]) [append] [არ არის რეპლიკაცია] როგორც SQL_ ოპერატორი [... N]) | ((შემდეგ |) [[,]) [არ არის რეპლიკაცია] [(თუ განახლება) განახლება (და | Range_Name)] [. .. N] | თუ (columns_updates () (operator_bit_purpace) bit_maska_imament) bit_maska_imament) bit_mask [... n]) sql_ ოპერატორი [... n]))

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

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

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

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

ტიპის ტრიგერები

SQL Server- ში, არსებობს ორი პარამეტრი, რომელიც განსაზღვრავს ტრიგერების ქცევას:

  • შემდეგ. გამოიწვევს მისი ბრძანებების წარმატებით შესრულების შემდეგ. თუ რაიმე მიზეზით ბრძანებები არ შეიძლება წარმატებით დასრულდეს, გამოიწვევს არ არის შესრულებული. უნდა აღინიშნოს, რომ მონაცემების ცვლილება მომხმარებლის მოთხოვნის შესრულების შედეგად და ტრიგერის აღსრულება ხორციელდება ერთი გარიგების ორგანიზმში: თუ გამოიწვევს rollback- ს, და მომხმარებლის ცვლილებები უარყოფილი იქნება. თქვენ შეგიძლიათ განსაზღვროთ რამდენიმე შემნახველი თითოეული ოპერაციისთვის (ჩასმა, განახლება, წაშლა). თუ მაგიდა გათვალისწინებულია რამდენიმე შემნახველების აღსრულებისათვის, SP_Settriggerorder System- ის შენახვის პროცედურის გამოყენებით, შეგიძლიათ მიუთითოთ, რომელი იქნება პირველი და რა არის ბოლო. Default SQL Server- ში, ყველა იწვევს შემდეგ-ტრიგერს.
  • Იმის მაგივრად. გამოიწვევს ბრძანებების შესრულების ნაცვლად. მას შემდეგ, რაც AfterAdrigger- ისგან განსხვავებით, ნაცვლად იმისა, რომ განისაზღვროს მაგიდაზე და პრეზენტაციაზე. თითოეული ჩასმა, განახლების ოპერაცია, შეგიძლიათ მხოლოდ ერთი ნაცვლად -თაგან.

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

არსებობს სამი ტიპის ტრიგერი:

  • Insert Trigger - დაწყება, როდესაც თქვენ ცდილობენ ჩადეთ მონაცემების გამოყენებით Insert ბრძანება.
  • განახლების ტრიგერი - დაწყება, როდესაც თქვენ ცდილობენ შეცვალოთ მონაცემების განახლება ბრძანების გამოყენებით.
  • წაშალეთ Trigger - დაწყებისას, როდესაც წაშლის ბრძანების გამოყენებით მონაცემების წაშლა.

მხატვრები [წაშლა] [,] [ჩასმა] [,] [განახლება] და იყიდება | შემდეგ | Იმის მაგივრად) ([,] განსაზღვრავს რომელი ბრძანება რეაგირებას გამოიწვევს. როდესაც ის ქმნის, ეს უნდა იყოს მითითებული მინიმუმ ერთი გუნდი. ნებადართული შექმნის გამოიწვევსორი ან სამივე გუნდის რეაგირება.

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

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

დიზაინი, როგორც SQL_ ოპერატორი [... N] განსაზღვრავს SQL ოპერატორების კომპლექტს და ბრძანებებს, რომლებიც შესრულდება, როდესაც გამოიწვევს, როდესაც გამოიწვევს.

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

  • მონაცემთა ბაზის შექმნა, შეცვლა და წაშლა;
  • სარეზერვო მონაცემთა ბაზის ან გარიგების ჟურნალის აღდგენა.

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

გამოიწვიოს პროგრამირება

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

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

გამოიწვევს (მონაცემთა ბაზა)

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

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

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

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

მაგალითი (Oracle):

/ * Trigger მაგიდაზე დონეზე * / შექმნის ან შეცვლის გამოიწვევს DistrictUpdArtrigger შემდეგ განახლება Distirt დაიწყება ჩადეთ Info Palues \u200b\u200b( "ცხრილი" უბანი "შეიცვალა"); Დასასრული;

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

/ * გამოიწვიოს სიმებიანი დონე * / თითოეული რიგის რაიონის განახლების შემდეგ შექმნის ან შეცვლის შედეგების შეცვლას "ერთი სიმებიანი მაგიდა" უბანში "შეიცვალა"); Დასასრული;


ვიკიმედია ფონდი. 2010.

  • შინამეურნეობა
  • სპექტროსკოპია

ნახეთ რა არის "გამოიწვევს (მონაცემთა ბაზები)" სხვა ლექსიკონებში:

    პრეზენტაცია (მონაცემთა ბაზები) - ეს ტერმინი სხვა მნიშვნელობას იხილავს პრეზენტაციას. პრეზენტაცია (Eng, უფრო მეტად თანხმობა არ არის სტანდარტული სახელი "ნახვა", Slane Programmers ხშირად გამოიყენება როგორც სესხებისგან ბრიტანეთის "Bind", "ბრმა") ... ... ვიკიპედია

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

    Relational მონაცემთა ბაზები - მონაცემთა ბაზის მონაცემთა ბაზის მონაცემთა ბაზა დაფუძნებული მონაცემების მოდელით. სიტყვა "relational" მოდის ინგლისურიდან. ურთიერთობა. რელაციური მონაცემთა ბაზები გამოიყენება მონაცემთა ბაზებთან მუშაობისთვის. რელაციური მონაცემთა ბაზების გამოყენება იყო ... ... ვიკიპედია

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

    კურსორი (მონაცემთა ბაზა) - ეს ტერმინი სხვა მნიშვნელობა აქვს, იხილეთ კურსორი (ღირებულებები). კურსორი კონტექსტური მეხსიერების არეალის მითითებით [წყარო არ არის მითითებული 126 დღე]. ზოგიერთი განხორციელების შესახებ ინფორმაციის ლოგიკური ენა SQL (Oracle, ... ... Wikipedia

    გამოიწვევს (ღირებულებები) - გამოიწვევს (Eng. უარყოფს არსებითი სახელი "doggy, latch, გამოიწვევს ზოგადი აზრით, წამყვანი ელემენტი action"; ზმნის მნიშვნელობით "მოქმედი"): რუსულ ენაზე, ტერმინი არის საწყისი რეგიონიდან ... ... ვიკიპედია

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

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

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

    მონაცემთა მოდელი - კლასიკური მონაცემთა ბაზის თეორიაში მონაცემთა მოდელია მონაცემთა ბაზის მართვის სისტემაში (DBMS) ფორმალური თეორია, რომელიც მოიცავს მინიმუმ სამი ასპექტს: 1) სტრუქტურის ასპექტს: მეთოდები აღწერს ტიპებს და .... .. ვიკიპედია

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

გამოიწვიოს განმარტება SQL ენის სტანდარტში

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

გამოიწვევს შედგენილი SQL პროცედურა, რომლის აღსრულება გამოწვეულია მონაცემთა ბაზის ფარგლებში გარკვეული მოვლენების დაწყების გამო. ტრიგერების გამოყენება ძირითადად მონაცემთა ბაზის მომხმარებლებისთვის მოსახერხებელია. და მაინც მათი გამოყენება ხშირად დაკავშირებულია I / O ოპერაციებზე დამატებითი რესურსების ხარჯებთან. იმ შემთხვევაში, თუ იგივე შედეგები (რესურსების გაცილებით ნაკლებად არასასურველი ხარჯების მქონე) შეიძლება მიღწეული იქნას შენახული პროცედურების ან აპლიკაციის პროგრამების გამოყენებით, ტრიგერების გამოყენება შეუსაბამოა.

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

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

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

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

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

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

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

<Определение_триггера>:: \u003d შექმნა TRIGGER NAME_TRIGGER ადრე | შემდეგ<триггерное_событие> On.<имя_таблицы> <тело_триггера>

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

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

Დანიშნულება <список_старых_или_новых_псевдонимов> ეხება ასეთ კომპონენტებს, როგორც ძველი ან ახალი ხაზი (ძველი / ახალი) ან ძველი ან ახალი მაგიდა (ძველი ცხრილი / ახალი მაგიდა). ნათელია, რომ ძველი ღირებულებები არ შეესაბამება ჩასმა მოვლენებისა და ახალი ღონისძიებების ჩასატარებლად.

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

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

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

MS SQL Server MS- ის ტრიგერების განხორციელება MS

MS SQL Server DBMS- ის განხორციელებაში გამოიყენება შემდეგი ოპერატორი, რომელიც ქმნის ან შეცვლის გამოიწვევს.

<Определение_триггера>:: (შექმნა | alter) trigger_name სახელი (name_name | view_name) ((შემდეგ |) ([წაშლა] [INSERT] [IDED]) [არ არის რეპლიკაცია ] როგორც SQL_ ოპერატორი [... n]) | ((შემდეგ |) ([,]) [Apple- ის] [არ არის რეპლიკაციის] [(განახლების შემთხვევაში) განახლება (და | RASH_NAME)] [.. . n] | თუ (columns_updates () (operator_bit_purpace) bit_maska_imament) bit_maska_imament) bit_mask [... n]) sql_ ოპერატორი [... n]))

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

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

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

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

ტიპის ტრიგერები

SQL Server- ში, არსებობს ორი პარამეტრი, რომელიც განსაზღვრავს ტრიგერების ქცევას:

  • შემდეგ. გამოიწვევს მისი ბრძანებების წარმატებით შესრულების შემდეგ. თუ რაიმე მიზეზით ბრძანებები არ შეიძლება წარმატებით დასრულდეს, გამოიწვევს არ არის შესრულებული. უნდა აღინიშნოს, რომ მონაცემების ცვლილება მომხმარებლის მოთხოვნის შესრულების შედეგად და ტრიგერის აღსრულება ხორციელდება ერთი გარიგების ორგანიზმში: თუ გამოიწვევს rollback- ს, და მომხმარებლის ცვლილებები უარყოფილი იქნება. თქვენ შეგიძლიათ განსაზღვროთ რამდენიმე შემნახველი თითოეული ოპერაციისთვის (ჩასმა, განახლება, წაშლა). თუ მაგიდა გათვალისწინებულია რამდენიმე შემნახველების აღსრულებისათვის, SP_Settriggerorder System- ის შენახვის პროცედურის გამოყენებით, შეგიძლიათ მიუთითოთ, რომელი იქნება პირველი და რა არის ბოლო. Default SQL Server- ში, ყველა იწვევს შემდეგ-ტრიგერს.
  • Იმის მაგივრად. გამოიწვევს ბრძანებების შესრულების ნაცვლად. მასპინძლებისგან განსხვავებით - trigger, ნაცვლად - trigger შეიძლება განისაზღვროს როგორც მაგიდა და მაყურებელი. თითოეული ჩასმა, განახლების ოპერაცია, შეგიძლიათ მხოლოდ ერთი ნაცვლად -თაგან.

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

არსებობს სამი ტიპის ტრიგერი:

  • Insert Trigger - დაწყება, როდესაც თქვენ ცდილობენ ჩადეთ მონაცემების გამოყენებით Insert ბრძანება.
  • განახლების ტრიგერი - დაწყება, როდესაც თქვენ ცდილობენ შეცვალოთ მონაცემების განახლება ბრძანების გამოყენებით.
  • წაშალეთ Trigger - დაწყებისას, როდესაც წაშლის ბრძანების გამოყენებით მონაცემების წაშლა.

მხატვრები [წაშლა] [,] [ჩასმა] [,] [განახლება] და იყიდება | შემდეგ | Იმის მაგივრად) ([,] განსაზღვრავს რომელი ბრძანება რეაგირებას გამოიწვევს. როდესაც ის ქმნის, ეს უნდა იყოს მითითებული მინიმუმ ერთი გუნდი. ნებადართული შექმნის გამოიწვევსორი ან სამივე გუნდის რეაგირება.

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

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

დიზაინი, როგორც SQL_ ოპერატორი [... N] განსაზღვრავს SQL ოპერატორების კომპლექტს და ბრძანებებს, რომლებიც შესრულდება, როდესაც გამოიწვევს, როდესაც გამოიწვევს.

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

  • მონაცემთა ბაზის შექმნა, შეცვლა და წაშლა;
  • სარეზერვო მონაცემთა ბაზის ან გარიგების ჟურნალის აღდგენა.

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

გამოიწვიოს პროგრამირება

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

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

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

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

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

სვეტების ჩამონათვალის მისაღებად, შეიცვალა ჩასმა ან განახლების ბრძანებების შესრულებისას, რამაც გამოიწვია გამოიწვევს აღსრულება, შეგიძლიათ გამოიყენოთ სვეტი SOPUMNS_UPDATED () ფუნქცია. იგი ბრუნდება ორობითი რიცხვი, რომელთაგან თითოეული, დაწყებული ახალგაზრდა, შეესაბამება ერთი ცხრილის სვეტს (სვეტების მიხედვით მაგიდის შექმნისას). თუ ცოტა "1" არის მითითებული, შესაბამისი სვეტი შეიცვალა. გარდა ამისა, სვეტის შეცვლის ფაქტი განსაზღვრავს და განახლების ფუნქციას (Library_Name).

-თვის გამოიწვევს მოხსნა გამოყენებული ბრძანება

DROP TRIGGER (NAMETRIGGER) [, ... N]

ჩვენ ვაძლევთ მაგალითებს იწვევს.

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

გარიგების მაგიდასთან შესვლის ბრძანება შეიძლება იყოს, მაგალითად, ასეთი:

გარიგების ღირებულებებში ჩასმა (3.1, -299, "01/08/2002")

შეიქმნა მკვეთრი რეაგირება მისი აღსრულების შემდეგ: აუცილებელია ბრძანება გააუქმოს ბრძანება, თუ საქონლის ღირებულება დარჩა კოდით გაყიდულ საქონელზე (პროდუქტის კოდექსის \u003d 3). Insertion ჩანაწერში, საქონლის რაოდენობა მითითებულია "+" ნიშანი, თუ საქონელი მიეწოდება და ნიშანი "-", თუ იგი იყიდება. წარმოდგენილია ტრიგერი კონფიგურირებულია მხოლოდ ერთი ჩაწერის დამუშავების პროცესში.

შექმენით Trigger Trigger_ins on გარიგება ჩასმა, როგორც თუ @ rowcount \u003d 1 დაიწყება თუ არ არსებობს (აირჩიეთ * ჩასმული, სადაც -<=ALL(SELECT Склад.Остаток FROM Склад,Сделка WHERE Склад.КодТовара= Сделка.КодТовара)) BEGIN ROLLBACK TRAN PRINT "Отмена поставки: товара на складе нет" END END მაგალითი 14.1. გამოყენებით გამოიწვევს განახორციელოს შეზღუდვები ღირებულება.

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

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

შეყვანის ღირებულებების გარიგება (3,1,200, "01/08/2002")

დასრულებული საქონელი კოდით 3 კოდექსის 1 კოდით 1 კოდით 200 ერთეულით.

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

შეცვალოს Trigger Trigger_ins on Transaction for Insert როგორც explare @x int, @ i rovcount \u003d 1 - მაგიდის გარიგებაში დასძენს ჩანაწერი - საქონლის მიწოდების შედეგად - გაყიდვის საქონლის ნაშთები არ უნდა იყოს - უბრალოდ, ვიდრე მისი ბალანსი მაგიდის საწყობიდან, თუ არ არსებობს (აირჩიეთ * ჩასმული, სადაც -< =ALL(SELECT Склад.Остаток FROM Склад,Сделка WHERE Склад.КодТовара= Сделка.КодТовара)) BEGIN ROLLBACK TRAN PRINT "откат товара нет " END --если записи о поставленном товаре еще нет, --добавляется соответствующая запись --в таблицу Склад IF NOT EXISTS (SELECT * FROM Склад С, inserted i WHERE С.КодТовара=i.КодТовара) INSERT INTO Склад (КодТовара,Остаток) ELSE --если запись о товаре уже была в таблице --Склад, то определяется код и количество --товара издобавленной в таблицу Сделка записи BEGIN SELECT @y=i.КодТовара, @x=i.Количество FROM Сделка С, inserted i WHERE С.КодТовара=i.КодТовара --и производится изменения количества товара в --таблице Склад UPDATE Склад SET Остаток=остаток[Email protected] სადაც Codtowder [Email protected] ბოლო დასასრული. მაგალითი 14.2. სტატისტიკური მონაცემების შეგროვების გზით.

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

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

შექმენით Trigger Trigger_DEL- ის წაშლა, თითქოს @@ rowcount \u003d 1 - ერთი იწყება @ x int, @ x int - განსაზღვრავს საქონლის მაგიდასთან მაგიდასთან მაგიდასთან დაკავშირება @ y \u003d codovar, @ x \u003d წაშლილი წაშლა - მაგიდის საწყობში არეგულირებს რიცხვს - Update Store Set Residue \u003d ნარჩენების რაოდენობა [Email protected] სადაც Codtowder [Email protected] Დასასრული. მაგალითი 14.3. გამოიწვიოს მაგიდაზე ჩაწერის მოხსნა

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

ყველა ოპერაციაში პროდუქტი, რომელსაც აქვს კოდს 3-ის ტოლი, შეამცირებს საქონლის რაოდენობას 10 ერთეულით.

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

შექმენით Trigger Trigger_Upd- ის განახლებისთვის, როგორც explare @x int, @ x_old int, @y int, @y_old int - კურსორი ახალი მნიშვნელობებით გამოცხადების Cur1 კურსორი შერჩევა Codovar, რაოდენობა ჩასმული - კურსორი ძველი დეკლარეტი Cur2 კურსორი ამისთვის აირჩიეთ Codovar, რაოდენობა წაშლილი ღია Cur1 ღია Cur2 - ნაბიჯი პარალელურად ორივე fetch შემდეგ cur1 on @X Cursors, @y fetch შემდეგ cur2 შევიდა @ x_old, @y_old ხოლო @@ fetch_status \u003d 0 დასაწყისი - ძველი პროდუქტის კოდი იგი ამცირებს მისი - მოპოვების საფონდო განახლების საწყობის კომპლექტი ნარჩენების \u003d ნარჩენების [Email protected]_old სადაც kodtower [Email protected]_old - ახალი პროდუქტის კოდი, თუ არ არსებობს ასეთი პროდუქტი საფონდო, ახალი ჩანაწერი, თუ არ არსებობს შეყვანილი (აირჩიეთ * საიდანაც Kodtovar საწყობი [Email protected]) საწყობის (CODOVAR, ნარჩენების) ღირებულებების ჩასმა (@ x, @ y) სხვა პროდუქტის კოდისთვის - ახალი პროდუქტის კოდისთვის ზრდის რიცხვს საფონდო განახლების საწყობის ნარჩენების ნარჩენების \u003d ნარჩენი [Email protected] სადაც Codtowder [Email protected] Fetch შემდეგ Cur1 შევიდა @ x, @y fetch შემდეგი cur2 inte @x_old, @y_old ბოლოს Cur1 Close Cur2 Deallocate Cur1 deallocate cur2 მაგალითი 14.4. გამოიწვიოს მაგიდაზე გადამუშავების ჩაწერისთვის

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

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

ALT TRIGGER TRIGGER_UPD- ის განახლებისთვის, როგორც გამოცხადებისას, @ @ x_old int, @ ay int, @y_old int, @ @ @ @ @ @ @ @ @Ony __) , წაშლილი ღია Curr1 ღია Curr2- ის ნომერი, CUR1- ისგან, @ @ x_old, @y_old, @y_old ხოლო @@ fetch_status \u003d 0 დაიწყე SELECT @ o \u003d ნარჩენები, სადაც კოდტოვა [Email protected] თუ @.<[Email protected] დასაწყისი RaisError ("Rendered", 16.10) Close Cur1 Cur2 Deallocate Cur1 Curr1 Deallocate Cur22 Rollback Tran დაბრუნების ბოლო განახლება Walke Set Pale \u003d ნარჩენები [Email protected]_old სადაც kodtower [Email protected]_old თუ არ არსებობს (აირჩიეთ საწყობი საწყობიდან [Email protected]) საწყობში (Codewood, ნარჩენების) ღირებულებების ჩასმა (@ x, @ y) სხვა განახლება საწყობის ნარჩენები \u003d ნარჩენები [Email protected] სადაც Codtowder [Email protected] Fetch შემდეგ Cur1 შევიდა @ x, @y fetch შემდეგი cur2 inte @x_old, @y_old ბოლოს Cur1 Close Cur2 Deallocate Cur1 deallocate cur2 მაგალითი 14.5. შესწორებული ტრიგერის ვერსია მაგიდაზე ჩაწერის ჩაწერისთვის

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

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

ALT TRIGGER TRIGGER_UPD გადაცემის ნაცვლად განახლების ნაცვლად, როგორც გამოაცხადეთ @K INT, @K_OLD INT DECLARE @x INT, @ x_old int, @ a int decleve _old int, @ o int decover curr1 კურსორი შერჩევა კოდები, kodtovar, რაოდენობა ჩასმა CUR2 კურსორი აირჩიეთ კოდების, Kodtovar, წაშლილი ღია Cur1 ღია Curr2 Fetch- დან Cur1- დან @ X, @ x, @ x, @ x_old, @ x_old, @y_old ხოლო @ fetch_status \u003d 0 დასაწყისი @ O \u003d ნარჩენების საწყისი Wovel Kodtovar [Email protected] თუ @ [Email protected] დასაწყისი raiserror ("ცვლილება", 16.10) განახლება გარიგება კომპლექტი რაოდენობა [Email protected], Პროდუქტის კოდი [Email protected] Wheredelka [Email protected] განახლება საწყობის კომპლექტი ნარჩენების \u003d ნარჩენების [Email protected]_old სადაც kodtower [Email protected]_old თუ არ არსებობს (აირჩიეთ საწყობი საწყობიდან [Email protected]) საწყობში (Codewood, ნარჩენების) ღირებულებების ჩასმა (@ x, @ y) სხვა განახლება საწყობის ნარჩენები \u003d ნარჩენები [Email protected] სადაც Codtowder [Email protected] END ENDSE RaisError ("ჩანაწერი არ შეცვლილა", 16.10) Fetch Next from @ k, @ x, @y fetch შემდეგ cur2 შევიდა cur2 შევიდა @ X_old, @y_old ბოლოს Cur1 Curllocate Curl მაგალითი 14.6. გამოიწვევს, რომელიც საშუალებას გაძლევთ გააუქმოთ მხოლოდ რამდენიმე ჩანაწერი და შეასრულოს ცვლილებები დანარჩენი.

ეს ეხება:SQL Server (დაწყებული 2008 წელს) SQL Azure Pack SQL Azureparalle მონაცემთა საწყობი მონაცემთა ბაზა

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

DDL ტრიგერები გამოიწვია საპასუხოდ რამდენიმე მონაცემთა აღწერილობა ენები (DDL). ეს მოვლენები პირველ რიგში შეესაბამება Transact-SQL- ს შექმნას, შეცვალებს, წვეთს ინსტრუქციებს და სისტემურ მაღაზიებს, რომლებიც DDL- ის ოპერაციებს ასრულებენ. შეყვანის ტრიგერები შეიძლება გამოიწვიოს რეაგირება ლოგონის მოვლენა, რომელიც ხდება საბაჟო სესიების დამონტაჟებისას. ტრიგერები შეიძლება შეიქმნას პირდაპირ Transact-SQL ინსტრუქციებით ან Microsoft- ში შექმნილი შეკრების მეთოდებისაგან. NET ჩარჩო კომპანიები (CLR) და SQL Server- ის მაგალითზე. SQL Server საშუალებას გაძლევთ შექმნათ მრავალჯერადი ტრიგერები ნებისმიერი ინსტრუქციისთვის.

SQL Server Syntax - გამოიწვიოს ჩასმა, განახლება, ან წაშლა განცხადების მაგიდასთან ან ნახვა (DML Trigger) შექმნა [ან შეცვალოს] [schema_name. ] Trigger_name on (მაგიდა | ნახვა) [ერთად [, ... n]] (შემდეგ | ნაცვლად) ([ჩასმა] [UPDATE] [UPDATE] [DELETE]) [არ არის რეპლიკაცია] როგორც (SQL_Statement [, ... N] | გარე სახელი } :: \u003d [encryption] [შეასრულოს როგორც პუნქტი] :: \u003d amage_name.class_name.method_name.

SQL Server Syntax - გამოიწვიოს ჩასმა, განახლება, ან წაშლა განცხადება მაგიდაზე (DML მაგიდები) შექმნა [ან შეცვალოს] [schema_name. ] Trigger_Name on (ცხრილი) [ერთად [, ... n]] (მას შემდეგ, რაც) ([INSERT] [UPDATE] [,] [წაშლა]) როგორც (SQL_Statement [;] [, ... N]) :: \u003d [[მშობლიური_კომპანია] [სქემა] [შეასრულოს როგორც პუნქტი]

გამოიწვიოს შექმნა, შეცვალოს, წვეთი, გრანტი, უარყოფა, გაუქმება ან განახლება განცხადება (DDL Trigger) შექმნა [ან Alter] Trigger Trigger_name შესახებ (ყველა სერვერი | მონაცემთა ბაზა) [ერთად [, ... n]] (შემდეგ |) (event_type | event_group) [, ... n] როგორც (sql_statement [;] [... n] | გარე სახელი< method specifier > [ ; ] }

გამოიწვიოს Logon Event (Logon Trigger) შექმნა [ან Alter] Trigger Trigger_Name ყველა სერვერზე [ერთად [, ... N]] (for | შემდეგ) ავტორიზაცია, როგორც (SQL_Statement [] [, ... n] | გარე სახელი< method specifier > [ ; ] } :: \u003d [encryption] [შეასრულოს როგორც პუნქტი]

Windows Azure SQL მონაცემთა ბაზის სინტაქსი - Trigger on ჩასმა, განახლება, ან წაშლა განცხადების მაგიდა ან ნახვა (DML Trigger) შექმნა [ან შეცვალოს] გამოიწვიოს [schema_name. ] Trigger_name on (მაგიდა | ნახვა) [ერთად [, ... n]] (ამისთვის | ნაცვლად) ([INSERT] [UPDATE] [DELETE]) AS (SQL_STATEMENT [;] [... n] [;]] ) :: \u003d [შეასრულოს როგორც პუნქტი]

Windows Azure SQL მონაცემთა ბაზის სინტაქსი - გამოიწვევს შექმნას, შეცვალოს, წვეთი, გრანტი, უარყოფა, გაუქმება, ან განახლება სტატისტიკის განცხადება (DDL Trigger) შექმნა [ან Alter] Trigger Trigger_name on (მონაცემთა ბაზა) [ერთად [, ... n]] (for | შემდეგ) (event_type | event_group) [, ... n] როგორც (sql_statement [;] [... n] [;]) :: \u003d [შეასრულოს როგორც პუნქტი]

Condifly ცვლის გამოიწვევს მხოლოდ იმ შემთხვევაში, თუ ეს უკვე არსებობს.

schema_name.
დიაგრამის სახელი მიეკუთვნება DML ტრიგს. DML Trigger Action შემოიფარგლება მაგიდის მაგიდასთან ან წარმომადგენლობასთან, რომლისთვისაც ისინი შექმნილია. schema_name. DDL ტრიგერების ან შეყვანისთვის არ არის მითითებული.

name_trigger
ტრიგერის სახელი. Საგანი name_trigger უნდა შეესაბამებოდეს წესებს, გარდა name_trigger ვერ იწყება სიმბოლოები # ან ##.

მაგიდა | ნახვა.
მაგიდა ან წარმომადგენლობა, რომელშიც DML გამოიწვევს შესრულებულია, ზოგჯერ მითითებულია, როგორც ტრიგერის მაგიდა ან გამოიწვევს წარმომადგენლობა. გაითვალისწინეთ მითითებული ცხრილის სახელი ან წარდგენა არ არის სავალდებულო. მხოლოდ ტრიგერის ნაცვლად შეიძლება მოიცავდეს პრეზენტაციას. DML ტრიგერები არ შეიძლება აღწერილი ადგილობრივ თუ გლობალურ დროულ ცხრილებში.

Მონაცემთა ბაზა
ვრცელდება DDL Trigger Scope მიმდინარე მონაცემთა ბაზაში. თუ მითითებულია, გამოიწვევს, როდესაც მუშაობს event_type. ან event_group ხდება მიმდინარე მონაცემთა ბაზაში.

ვრცელდება DDL Trigger Scope ან შესვლის გამოიწვევს მიმდინარე სერვერზე. თუ მითითებულია, გამოიწვევს, როდესაც მუშაობს event_type. ან event_group არსებულ სერვერზე ნებისმიერ ადგილას არსებობს ადგილი.

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

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

დამატებითი ინფორმაციისთვის იხილეთ სექცია.

მშობლიური_კომპანია
მიუთითებს, რომ გამოიწვევს თავის კოდექსში შედგენილია.

ეს პარამეტრი სავალდებულოა მაგიდაზე მაგიდაზე ოპტიმიზირებულია.

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

ეს პარამეტრი სავალდებულოა ცხრილებისთვის მაგიდაზე ოპტიმიზირებულ მაგიდებზე და არ არის მხარდაჭერილი ტრაგგერებისათვის ჩვეულებრივი ცხრილებისთვის.

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

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

მას შემდეგ, რაც იწვევს იდეების შესახებ.

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

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

ტრიგერების ნაცვლად ნაცვლად არ არის დაშვებული, რომლებიც იყენებენ შემოწმების პარამეტრს პარამეტრს. SQL Server იწვევს შეცდომას, თუ ნაცვლად იმისა, რომ გამოიწვევს მხარდაჭერის მხარდაჭერის პარამეტრს. მომხმარებელი უნდა წაშალოთ ეს პარამეტრი შეცვალოს Triggeg Astead- ის განსაზღვრისას.

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

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

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

event_type.
Transact-SQL ენის ღონისძიების სახელი, რომელიც აღსრულების შემდეგ იწვევს Trigger DDL Trigger- ს. DDL ტრიგერების მოვლენები ჩამოთვლილია.

event_group
სტანდარტული Transact-SQL ენის ღონისძიების ჯგუფის სახელი. DDL Trigger გამოიწვია მას შემდეგ, რაც ასრულებს ნებისმიერი Transact-SQL ენის მოვლენების, რომელიც ეკუთვნის event_group. DDL ტრიგერების მოვლენების ჩამონათვალი ჩამოთვლილია.

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

არა რეპლიკაცია

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

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

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

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

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

აირჩიეთ * წაშლილი;

დამატებითი ინფორმაციისთვის იხილეთ სექცია.

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

SQL Serverells განახლება ტექსტი, ntext., ან სურათი სვეტი გამოიწვევს ცხრილების ან წარმომადგენლობების ნაცვლად.

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

< method_specifier >

მიუთითებს ასამბლეის მეთოდი CLR-Trigger- ის სავალდებულო. ეს მეთოდი არ უნდა მიიღოს არგუმენტები და დაბრუნების ბათილად ღირებულებები. class_name. უნდა იყოს სწორი SQL Server Identifier და არსებობს კლასის ასამბლეის ასამბლეის. თუ კლასს აქვს სახელი, რომელიც შეიცავს ქულების შემცველობას (.), რათა გამოყოს სახელთა სივრცე, კლასი სახელი უნდა იყოს კვადრატულ ფრჩხილებში () ან ორმაგი შეთავაზებები (""). კლასი არ შეიძლება ჩანერგილი.

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

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

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

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

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

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

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

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

Transact-SQL Trigger შეიძლება აშენდეს კონკრეტული ქმედებების შესასრულებლად გარკვეული სვეტების შეცვლის შესახებ განახლების ან ინსტრუქციების გამოყენებით. ამ მიზნით გამოიყენეთ ან გამოიწვიოს ტრიგერად. განახლების () დიზაინი ამოწმებს განახლებას ან ინსტრუქციებს ერთ სვეტზე. Columns_Updated Design- ის გამოყენებით, რამდენიმე სვეტზე ჩატარებულ განახლებას ან ჩასმა ინსტრუქციებს, შემოწმებულია და ცოტა შაბლონი დაბრუნდა, რომელიც აჩვენებს, თუ რომელი სვეტები ჩასმული ან განახლებულია.

გამოიწვიოს შეზღუდვები

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

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

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

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

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

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

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

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

ინსტრუქციის წერითი (ხე-ტყის გარეშე) არ იწვევს იწვევს.

DML ტრიგერებში არ არის დაშვებული შემდეგი Transact-SQL ენის ინსტრუქციები:

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

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

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

DML ტრიგერებისგან განსხვავებით, DDL ტრიგერები არ შემოიფარგლება სქემის ტერიტორიაზე. ამიტომ, DDL ტრიგერების შესახებ მეტადატის მოთხოვნით, თქვენ არ შეგიძლიათ გამოიყენოთ ისეთი ფუნქციები, როგორიცაა Object_id, Object_name, ObjectProperty და ObjectPropertyex. გამოიყენეთ დირექტორია პრეზენტაცია ნაცვლად. დამატებითი ინფორმაციისთვის იხილეთ სექცია.

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

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

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

შესასვლელი ტრიგერის გამორთვა

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

დაბრუნების შედეგები

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

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

რამდენიმე ტრიგერი

SQL Server საშუალებას გაძლევთ შექმნათ მრავალჯერადი ტრიგერები თითოეული DML, DDL და Logon Event. მაგალითად, თუ განახლების სახელმძღვანელოს შექმნის შედეგია, რომელიც უკვე განახლდება, განახლების გამოიწვევს, განახლების გამოიწვევს დამატებით შექმნილია. SQL Server- ის ადრეულ ვერსიებში მხოლოდ ერთი ტრიგერი დაშვებულია თითოეულ ცხრავად თითოეული მონაცემთა ცვლილების ღონისძიების ჩასმა, განახლება ან წაშლა.

რეკურსიული ტრიგერები

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

რეკურსიულ ტრიგერებში შეიძლება მოხდეს შემდეგი ტიპები:

    არაპირდაპირი რეკურსიონი

    არაპირდაპირი რეკურსია, განაცხადის განახლებები T1 მაგიდაზე. ეს ღონისძიება იწვევს TR.1 Trigger Trigger, რომ განახლებები T2 მაგიდა. ეს იწვევს T2 T2 Trigger T2 T1 ცხრილის განახლებას.

    პირდაპირი რეკურსია

    პირდაპირი რეკურსია, განაცხადის განახლებები T1 მაგიდა. ეს ღონისძიება იწვევს TRI1 გამოიწვევს რეაგირებას, რომელიც განახლდება T1 მაგიდაზე. მას შემდეგ, რაც T1 მაგიდა უკვე განახლდა, \u200b\u200bTrig გამოიწვევს trigs ერთხელ და ასე შემდეგ.

შემდეგი მაგალითია ორივე ტიპის რეკურსია: სწორი და არაპირდაპირი. დავუშვათ T1 მაგიდა განსაზღვრავს ორ გამოიწვევს: TR1 და TR2. TR1 Trigger recursively განახლებები T1 მაგიდა. განახლების ინსტრუქცია ასრულებს თითოეულ ტრიგერს TR1 და TR2 ერთხელ. გარდა ამისა, გამოიწვევს TRI1 Trigger Trigger Trigger Trigger (რეკურსიულად) და TR2. ჩასმული და წაშლილი ტრიგერის მაგიდები შეიცავს ხაზებს, რომლებიც მხოლოდ განახლებულ ინსტრუქციებს ვრცელდება, რამაც გამოიწვია გამოიწვევს.

გამორთვა recursive_triggers პარამეტრები ხელს უშლის მხოლოდ პირდაპირი recursion. გამორთვა არაპირდაპირი რეკურსია, SP_Configure- ის შენახვის პროცედურის გამოყენებით, The Nested Triggers სერვერზე 0.

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

Nested ტრიგერები

Trigger nesting შეიძლება მიაღწიოს მაქსიმალურ დონეზე 32. თუ გამოიწვევს ცვლის მაგიდას, რისთვისაც კიდევ ერთი გამოიწვევს განისაზღვრება, მაშინ მეორე გამოიხატება, რომელიც იწვევს მესამე და ა.შ. თუ ჯაჭვის რომელიმე იწვევს უსასრულო ციკლის გამორთვას, მობუდარი დონეს აღემატება დასაშვებ ლიმიტს და გამოიწვევს რეაგირებას. თუ Transact-SQL Trigger ასრულებს კონტროლირებად კოდს CLR გარემოს მეთოდის, ტიპის ან სტატისტიკური ფუნქციის მითითებით, ეს ბმული ითვლება ერთ-ერთ დასაშვებად 32 მობუდარი დონეზე. მართვადი კოდიდან გამოწვეული მეთოდები არ ექვემდებარება ამ შეზღუდვას.

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

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

დაგვიანებული ინტერპრეტაცია სახელები

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

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

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

A. DML- ის გამოყენებით გაფრთხილების გაგზავნა

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

შექმნა Trigger Reminder1 on Sales.Customer შემდეგ ჩადეთ, განახლება როგორც raiserror ("აცნობოს მომხმარებელთა ურთიერთობები", 16, 10); გადასვლა.

B. გამოყენებით DML გამოიწვიოს გამაფრთხილებელი გაგზავნა გაგზავნილი ელ

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

შექმნა Trigger Reminder2 on Sales.Customer შემდეგ ჩასმა, განახლება, წაშლა ASDB.Sp_send_dbmail @Profile_name \u003d "AdventureWorks2012 ადმინისტრატორი", @ Recipients \u003d " [Email protected]", @ @ \u003d "დონ" "დაგვავიწყდება გაყიდვების ძალისთვის ანგარიშის ბეჭდვა"., @ subject \u003d "შეხსენება"; გადასვლა.

B. გამოყენებით DML შემდეგ გამოიწვიოს იძულებითი განაცხადის ბიზნესის წესები შორის bueenderheader და გამყიდველი მაგიდები

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

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

ეს გამოიწვევს ხელს უშლის ზედიზედ შესყიდვისას შესყიდვისას. PurchaseOrderheader მაგიდა - როდესაც მითითებული გამყიდველის საკრედიტო რეიტინგი 5-მდე (საშუალოდ) არის მითითებული. შეიძინეთ შესყიდვის შესყიდვისას.შეიძლება შესყიდვის შესყიდვისას.პურჩესდერდერდერის შემდეგ, როგორც ჩანს, როგორც ჩანს, როგორც ჩანს, როგორც ჩანს, როგორც PurchaseOrderHeader როგორც P შეუერთდება ჩასმული როგორც მე p.PurchAseOrderId \u003d i .PurchaseOrderID გაწევრიანება შესყიდვა. Vendorid, სადაც V.BusinessentyId \u003d P. V.Creditrating \u003d 5) დასაწყისი raiserror ( "გამყიდველი" საკრედიტო რეიტინგი არის დაბალი, რათა მიიღოთ ახალი შესყიდვების ბრძანებები. ", 16 , 1 ); Rollback გარიგება; Დაბრუნების. Დასასრული; გადასვლა. - ეს განცხადება ცდილობს შეიტანოს ზედიზედ შესყიდვის მაგიდაზე - გამყიდველისთვის, რომელსაც აქვს საშუალო საკრედიტო რეიტინგის ქვემოთ. - მას შემდეგ, რაც ჩასმა გამოიწვევს გაათავისუფლეს და ჩასმა გარიგება უკან დაბრუნდა. შესყიდვების შესყიდვაზე () 3567.564, 1114.8638); გადასვლა.

გამოყენებით DDL DDL გამოიწვევს

მომდევნო მაგალითში DDL Trigger გამოიყენება მონაცემთა ბაზის სინონიმების თავიდან ასაცილებლად.

შექმენით Trigger უსაფრთხოების მონაცემთა ბაზაში Drop_Synonym for RaisError ( "თქვენ უნდა გამორთოთ" უსაფრთხოება "სინონიმების ჩამოშლა!", 10, 1) Rollback Go Drop Trigger უსაფრთხოების მონაცემთა ბაზაში; გადასვლა.

D. სერვერის გამოყენებით DDL Trigger

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

შექმნა Trigger ddl_trig_database ყველა სერვერზე შექმნა _database როგორც ბეჭდვითი "მონაცემთა ბაზაში შექმნილი." აირჩიეთ EventData () ღირებულება ( "(/ / Event_instance / tsqlcommand / commandText)", "Nvarchar (MAX)") წასვლა DROP TRIGGER DDL_TRIG_DATABASE ყველა სერვერზე; გადასვლა.

E. შესასვლელი ტრიგერის გამოყენებით

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

გამოიყენეთ ოსტატი; გადასვლა. შესვლა login_test პაროლით \u003d "3khj6dhx (0xvysdf" must_change, check_expiration \u003d on; გადასვლა. საგრანტო ნახვა სერვერი სახელმწიფო login_test; გადასვლა. შექმნა Trigger Connection_limit_trigger ყველა სერვერზე, როგორც "login_test" შესასწავლად, როგორც "login_test" () \u003d "login_test" \u003d "login_test" და (აირჩიეთ რაოდენობა (*) sys .dm_Exec_sessions სადაც is_user_process \u003d 1 და original_login_name \u003d "login_test")\u003e