CREATE PROCEDURE [dbo].[DeleteObject]
@Path nvarchar (425),
@Prefix nvarchar (850)
AS
UPDATE SnapshotData
SET PermanentRefcount = PermanentRefcount - 1
FROM
Catalog AS R WITH (XLOCK)
INNER JOIN [SnapshotData] AS SD ON R.Intermediate = SD.SnapshotDataID
WHERE
(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*')
UPDATE SnapshotData
SET PermanentRefcount = PermanentRefcount - 1
FROM
Catalog AS R WITH (XLOCK)
INNER JOIN [SnapshotData] AS SD ON R.SnapshotDataID = SD.SnapshotDataID
WHERE
(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*')
DELETE History
FROM
[Catalog] AS R
INNER JOIN [History] AS S ON R.ItemID = S.ReportID
WHERE
(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*')
DELETE ModelDrill
FROM
[Catalog] AS C
INNER JOIN [ModelDrill] AS M ON C.ItemID = M.ReportID
WHERE
(C.Path = @Path OR C.Path LIKE @Prefix ESCAPE '*')
UPDATE [DataSource]
SET
[Flags] = [Flags] & 0x7FFFFFFD,
[Link] = NULL
FROM
[Catalog] AS C
INNER JOIN [DataSource] AS DS ON C.[ItemID] = DS.[Link]
WHERE
(C.Path = @Path OR C.Path LIKE @Prefix ESCAPE '*')
DELETE [DataSource]
FROM
[Catalog] AS R
INNER JOIN [DataSource] AS DS ON R.[ItemID] = DS.[ItemID]
WHERE
(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*')
UPDATE LR
SET
LR.LinkSourceID = NULL
FROM
[Catalog] AS R INNER JOIN [Catalog] AS LR ON R.ItemID = LR.LinkSourceID
WHERE
(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*')
AND
(LR.Path NOT LIKE @Prefix ESCAPE '*')
UPDATE SN
SET
PermanentRefcount = PermanentRefcount - 1
FROM
[ReportServerTempDB].dbo.SnapshotData AS SN
INNER JOIN [ReportServerTempDB].dbo.ExecutionCache AS EC on SN.SnapshotDataID = EC.SnapshotDataID
INNER JOIN Catalog AS C ON EC.ReportID = C.ItemID
WHERE
(Path = @Path OR Path LIKE @Prefix ESCAPE '*')
DELETE EC
FROM
[ReportServerTempDB].dbo.ExecutionCache AS EC
INNER JOIN Catalog AS C ON EC.ReportID = C.ItemID
WHERE
(Path = @Path OR Path LIKE @Prefix ESCAPE '*')
DELETE
FROM
[Catalog]
WHERE
(Path = @Path OR Path LIKE @Prefix ESCAPE '*')
EXEC CleanOrphanedPolicies
GO
GRANT EXECUTE ON [dbo].[DeleteObject] TO [RSExecRole]
GO