Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy wyzwalacz SQL może wywołać usługę sieciową?

Nawet jeśli technicznie może, to naprawdę nie jest dobry pomysł! Wyzwalacz powinien być bardzo oszczędny i zdecydowanie nie powinien obejmować długiej operacji (którą zdecydowanie jest wywołanie usługi internetowej)! Przemyśl swoją architekturę - powinien być na to lepszy sposób!

Moim zaleceniem byłoby oddzielenie zadania „zauważenia”, że musisz wywołać usługę sieciową w wyzwalaczu, od rzeczywistego wykonania tego wywołania usługi sieciowej.

Coś takiego:

  1. w kodzie wyzwalacza, wstaw "wywołaj usługę internetową później" do tabeli (tylko INSERT aby była szczupła i szybka - to wszystko)

  2. mieć usługę asynchroniczną (zadanie SQL lub najlepiej usługę Windows NT), która wykonuje te wywołania niezależnie od rzeczywistego wykonania wyzwalacza i przechowuje wszelkie dane pobrane z tej usługi sieciowej w odpowiednich tabelach w Twojej bazie danych.

Wyzwalacz to bardzo wybredna rzecz - zawsze powinien być bardzo szybki, bardzo oszczędny - wykonaj INSERT lub co najwyżej dwa - i za wszelką cenę unikaj kursorów w wyzwalaczach lub innych długotrwałych operacji (takich jak wywołanie usługi sieciowej)

Brent Ozar ma świetny webcast (prezentowany na SQL PASS) na temat 10 najczęstszych błędów programistów, których nie można skalować a wyzwalacze to pierwsza rzecz, na którą się skupia! Gorąco polecam



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać kolumnę NOT NULL FOREIGN KEY do istniejącej (zapełnionej) tabeli w MS SQL?

  2. Jak przekonwertować obraz na tablicę bajtów za pomocą javascript tylko do przechowywania obrazu na serwerze sql?

  3. Jak uzyskać listę kolumn z unikalnymi ograniczeniami w bazie danych SQL Server — samouczek SQL Server / TSQL część 98?

  4. Automatycznie generuj wartość hierarchii

  5. Wstaw wiele węzłów do pola XML w jednym zapytaniu