SQL Server: условный триггер на импортированной строке - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь создать триггер для таблицы [Catalog] в базе данных [ReportServer].

Идея такова: когда отчет публикуется, я хотел бы проверить

  1. , если он построен с источником данных VIP, и
  2. , если он нев папке 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';  

Большое спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...