Я пытаюсь создать триггер для таблицы [Catalog]
в базе данных [ReportServer]
.
Идея такова: когда отчет публикуется, я хотел бы проверить
- , если он построен с источником данных VIP, и
- , если он нев папке VIP, потому что тогда он должен быть удален
Я не знаю, как создать такой триггер: запрос и большинство других шагов работают или могли бы работать.
Не могли бы вы помочь с запросом последней записи в таблице [Catalog]
?
Итак, мой процесс
Create a Trigger when a new line is inserted (a report is published)
as
if the vip-datasource is used and
if the vip-folder is not used then
Do save the wrongpath and
Do delete the report and
Do send a mail with information about the wrongpath
Моя информация PowerShell из Get-RsItemReference -Path /VIP-Area/Test-Report
равна
Name = DataSource1
Reference = /VIP-Area/dsDWH_VIP
ReferenceType = DataSource
DataSource1
имеет значение 'B5DE8D20-894E-4D38-8340-164A0DE61F0F' в [Catalog].[ItemID]
и [DataSource].[Link]
CREATE TRIGGER VIP_Monitor
ON [ReportServer].[dbo].[Catalog]
AFTER INSERT, UPDATE
AS
DECLARE
@TestPath NVARCHAR(MAX),
@TestDataSource NVARCHAR(MAX),
@WrongPath NVARCHAR(MAX)
SET @TestPath = '/VIP-Area/'
SET @TestDataSource = 'dsDWH_VIP'
IF @TestDataSource = (SELECT Cat1.[Name] AS [DatasourceName]
FROM [ReportServer].[dbo].[Catalog] AS Cat1
LEFT JOIN [ReportServer].[dbo].[DataSource] AS DS1 ON Cat1.ItemID = DS1.Link
LEFT JOIN [ReportServer].[dbo].[Catalog] AS Cat2 ON DS1.ItemID = Cat2.ItemID
WHERE Cat1.[ItemID] = 'B5DE8D20-894E-4D38-8340-164A0DE61F0F')
IF @TestPath != (SELECT LEFT(Cat1.[Path], 10) AS [DatasourceName]
FROM [ReportServer].[dbo].[Catalog] AS Cat1
LEFT JOIN [ReportServer].[dbo].[DataSource] AS DS1 ON Cat1.[ItemID] = DS1.Link
LEFT JOIN [ReportServer].[dbo].[Catalog] AS Cat2 ON DS1.[ItemID] = Cat2.[ItemID]
WHERE Cat1.[ItemID] = 'B5DE8D20-894E-4D38-8340-164A0DE61F0F')
SET @WrongPath = (SELECT LEFT(Cat1.[Path], 10) AS [DatasourceName]
FROM [ReportServer].[dbo].[Catalog] AS Cat1
LEFT JOIN [ReportServer].[dbo].[DataSource] AS DS1 ON Cat1.[ItemID] = DS1.Link
LEFT JOIN [ReportServer].[dbo].[Catalog] AS Cat2 ON DS1.[ItemID] = Cat2.[ItemID]
WHERE Cat1.[ItemID] = 'B5DE8D20-894E-4D38-8340-164A0DE61F0F')
DELETE FROM [ReportServer].[dbo].[Catalog] AS Cat1
WHERE Cat1.[Name] = ### Inserted Report Name ? ###
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Admin',
@recipients = 'test@test.de',
@body = 'The VIP-Report was built in ' + @WrongPath ,
@subject = 'Warning: VIP-Report in false Folder';
Большое спасибо:)