Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Trigger Вмъкване от множество таблици

Вие не препращате към вмъкнатите или изтритите таблици, които са налични само в тригера, така че, разбира се, връщате повече записи, отколкото са ви необходими във вашата заявка.

Когато за първи път пиша тригер, това, което правя, е да създам временна таблица, наречена #inserted (и/или #deleted) и да я попълня с няколко записа. Трябва да съответства на дизайна на масата, върху която ще бъде спусъкът. Важно е вашата временна таблица да има няколко входни записа, които може да отговарят на различните критерии, които засягат вашата заявка (така че във вашия случай искате някои, където броят на случаите ще бъде 0, и някои, където не би например) и това би било типично на данни, вмъкнати в таблицата или актуализирани инициал. Тригерите на SQL сървър работят с набори от данни, така че това също гарантира, че вашият тригер може правилно да обработва множество вмъквания или актуализации на записи. Правилно написан тригер ще има тестови случаи, които трябва да тествате, за да сте сигурни, че всичко се случва правилно, вашата таблица #inserted трябва да включва записи, които отговарят на всички тези тестови случаи.

След това напишете заявката в транзакция (и я върнете назад, докато тествате), като се присъедините към #inserted. Ако правите вмъкване с избрано, пишете само избраната част, докато не получите това правилно, след което добавете вмъкването. За тестване напишете избор от таблицата, в която вмъквате, за да видите данните, които сте вмъкнали, преди да направите връщане назад.

След като накарате всичко да работи, променете референциите #inserted на вмъкнати, премахнете всеки код за тестване и, разбира се, връщането назад (евентуално цялата транзакция в зависимост от това, което правите.) и добавете частта за премахване и създаване на задействане на кода. Сега можете да тествате своя тригер като тригер, но сте в добра форма, защото знаете, че е вероятно да работи от предишното ви тестване.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да видя изтритите записи от таблица на sql сървър?

  2. Разделяне на низ със запетая в SQL Server 2008

  3. Автоматично увеличаване на индекса за Microsoft SQL Server 2008 R2

  4. Условен оператор WHERE SQL Server

  5. Рекурсивно конкатениране на родителски елементи