Проблема, которую показывает ОШИБКА, заключается в том, что вы не можете использовать удаленные / вставленные таблицы в хранимых процедурах, а просто доступны в триггерах .
Если вы хотите иметь количество вставленных записей или удаленных У записей в таблице есть два способа сделать это, самый простой из которых:
Создать хранимую процедуру следующим образом:
CREATE PROC [dbo].[SP_Gabungan]
@REPORT_DT DATE,@DeletedCount INT , @InsertedCount Int
AS
BEGIN
...
Создать триггер после вставки и удаления ( так что вы можете вставить / удалить таблицы)
Затем получите счетчик, как вы делали это в своем коде:
DECLARE @action nvarchar (10),
@insCount int = (SELECT COUNT (*) FROM INSERTED),
@delCount int = (SELECT COUNT (*) FROM DELETED)
Вызовите свою хранимую процедуру в Trigger и передайте @insCount и @delCount в качестве входных данных
EXEC [dbo].[SP_Gabungan]
@REPORT_DT = GETDATE() , @InsertedCount = @insCount , @DeletedCount = @delCount
Похожий вопрос для других способов, таких как временные таблицы или ...
Как использовать вставленную \ удаленную таблицу в хранимой процедуре?
Также по ссылке ниже задается вопрос об определении триггера для удаления и вставки, чтобы вы могли использовать обе удаленные / вставленные таблицы вместе
SQL Триггер при обновлении, вставке, удалении при отсутствии спецификации ifi c строка, столбец или таблица
Второй способ, который лучше всего выполнять, когда вы выполняете все эти процессы, состоит в том, чтобы получить журнал ваших вставок, обновлений или удалений. вы не используете триггеры, которые снижают производительность вашего процесса.
(Если это полезно, я могу порекомендовать некоторые идеи для сохранения журналов таблиц)
CREATE PROC [dbo].[SP_Gabungan]
@REPORT_DT DATE
,@DeletedCount INT
,@InsertedCount INT
,@UpdateCount INT
AS BEGIN
DECLARE @action INT
SET @action = CASE
WHEN @InsertCount <> 0 THEN 1
WHEN @UpdateCount <> 0 THEN 2
WHEN @DeletedCount <> 0 THEN 3
END
SELECT
@REPORT_DT AS REPORT_DATE,
FD.BRANCH_CODE AS [BRANCH],
@action AS [ID_OPERATIONAL],
BR.REGULATOR_BRANCH as [RG_BRANCH]
FROM
[DBO].[F_RR_FUNN] FD
LEFT JOIN
[DBO].[MS_BRANCH] BR ON BR.BRANCH_CD = FD.BRANCH_CODE
WHERE
FD.GROUP_PRODUCT = 'CA'
AND Y17sa = '1'
AND FD.REPORT_DATE = @REPORT_DT END
CREATE TRIGGER [YourTriggerName]
AFTER INSERT/UPDATE/DELETE ON [db].[tablename]
FOR EACH ROW
BEGIN
DECLARE
@insCount int = (SELECT COUNT (*) FROM New), -- New in MySQL is same as inserted,deleted,updated
@delCount int = (SELECT COUNT (*) FROM Old),
@upCount int = (SELECT COUNT (*) FROM New),
EXEC [dbo].[SP_Gabungan]
@REPORT_DT = GETDATE()
,@DeletedCount = @delCount
,@InsertedCount = @insCount
,@UpdateCount = @upCount
END