Mam następujący wyzwalacz:
USE SomeDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [Staging].[RunPivot15]
ON [Staging].[UriData]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
EXEC [Staging].[PivotData]
END
Nie wystrzeli. Dana tabela otrzymuje około 30 wierszy co pięć minut. Od tego momentu utknąłem. Czytałem to, ponieważ wstawia się więcej niż jeden wiersz, muszę uruchomić kursor. Próbowałem kursora i nie mogę go również uruchomić.
Czy możesz doradzić, jakie jest najlepsze podejście tutaj?
TIA
1 odpowiedź
Jest bardzo mało prawdopodobne, że spust nie zadziała. Dodaj kilka instrukcji print wokół wywołania procedury w wyzwalaczu, ewentualnie również w procedurze składowanej. Pomoże to śledzić wykonanie po uruchomieniu instrukcji aktualizacji w Management Studio w celu uruchomienia wyzwalacza.
USE SomeDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [Staging].[RunPivot15]
ON [Staging].[UriData]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
PRINT 'Before call.'
EXEC [Staging].[PivotData]
PRINT 'After call.'
END
Następnie uruchom instrukcję aktualizacji w Management Studio i sprawdź zakładkę Wiadomości, aby zobaczyć, czy Twoje wiadomości są drukowane.
update Staging.RunPivot15 set SomeColumn = SomeColumn where SomeColumn = SomeValue
Nie, nie potrzebujesz kursorów. Po uruchomieniu wyzwalacza, jeśli dotyczy to więcej niż jednego wiersza, w pseudotablicach wstawionych/usuniętych będzie również wiele wierszy. W twoim przypadku również nie czytasz, które wiersze są aktualizowane, więc po prostu uruchom procedurę. Jeśli chcesz wiedzieć, które wiersze są dokładnie modyfikowane, napisz kod przetwarzający je w podejściu opartym na zbiorach (wszystkie wiersze naraz). Zapętlanie kursorami praktycznie nigdy nie jest dobrym pomysłem w bazie danych.
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.