Триггер SSRS для обновления описания с дополнительной информацией

Я пытаюсь создать триггер, который обновит описание в SSRS для отредактированной записи.

Я пытаюсь добавить информацию о расписании в столбец «Описание» на экране SSRS, где вы назначаете расписания отчету.

У меня есть следующий запрос:

CREATE TRIGGER UpdateDescription
ON [dbo].[Subscriptions]
AFTER INSERT,  UPDATE
AS
UPDATE dbo.Subscriptions
SET [Description] = a.Description + ' | Schedule: ' + d.Name
FROM dbo.Subscriptions a
LEFT JOIN dbo.Catalog b
ON a.Report_OID = b.ItemID
LEFT JOIN dbo.ReportSchedule c
ON b.ItemID = c.ReportID
LEFT JOIN dbo.Schedule d
ON c.ScheduleID = d.ScheduleID
WHERE

Когда этот триггер установлен, и я редактирую отчет, он меняет описание для каждого расписания для всех отчетов .... Какой тип параметра я могу добавить в оператор WHERE в конце, чтобы он редактировал только описание расписания Я сейчас создаю / обновляю?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо того, чтобы использовать предложение WHERE, вы должны указать INNER JOIN в таблице INSERTED. Это будет содержать только строки, которые были вставлены в таблицу:

CREATE TRIGGER UpdateDescription
ON [dbo].[Subscriptions]
AFTER INSERT, UPDATE
AS
UPDATE dbo.Subscriptions
SET [Description] = a.Description + ' | Schedule: ' + d.Name
FROM dbo.Subscriptions a
    INNER JOIN inserted i ON i.SubscriptionID = a.SubscriptionID
    LEFT JOIN dbo.Catalog b ON a.Report_OID = b.ItemID
    LEFT JOIN dbo.ReportSchedule c ON b.ItemID = c.ReportID
    LEFT JOIN dbo.Schedule d ON c.ScheduleID = d.ScheduleID;

Привет, как уже упоминалось выше, в ответ на @MadBert я не могу найти эту таблицу.

user10196069 12.09.2018 15:44

Таблица существует только в рамках триггера INSERT или UPDATE.

Dave.Gugg 12.09.2018 15:52

Это работает, спасибо. Лучший ответ - MadBert просто потому, что он был немного быстрее ...

user10196069 13.09.2018 11:11
Ответ принят как подходящий

Я думаю, вам нужно присоединиться к таблице INSERTED, в которой хранятся все измененные записи.

INNER JOIN INSERTED as I ON dbo.Subscriptions.Id = I.Id

Привет! Кажется, у меня нет этой таблицы в моей базе данных ReportServer ... Я только что понял, что использую SSRS 2012, а не 2008 - может ли это быть причиной отсутствия этой таблицы?

user10196069 12.09.2018 15:43

Вставленная таблица - это специальная таблица, созданная и управляемая SQL Server автоматически. См. Использовать вставленную таблицу. Эта таблица создается во время выполнения триггера и может использоваться только в этом временном окне.

MadBert 12.09.2018 15:47

Работает как шарм. Большое тебе спасибо.

user10196069 13.09.2018 11:10

Другие вопросы по теме