CREATE PROCEDURE [dbo].[SetCacheOptions]
@Path as nvarchar(425),
@CacheReport as bit,
@ExpirationFlags as int,
@CacheExpiration as int = NULL
AS
DECLARE @CachePolicyID as uniqueidentifier
SELECT @CachePolicyID = (SELECT CachePolicyID
FROM CachePolicy with (XLOCK) INNER JOIN Catalog ON Catalog.ItemID = CachePolicy.ReportID
WHERE Catalog.Path = @Path)
IF @CachePolicyID IS NULL
BEGIN
IF @CacheReport = 1
BEGIN
INSERT INTO CachePolicy
(CachePolicyID, ReportID, ExpirationFlags, CacheExpiration)
(SELECT NEWID(), ItemID, @ExpirationFlags, @CacheExpiration
FROM Catalog WHERE Catalog.Path = @Path)
END
END
ELSE
BEGIN
IF @CacheReport = 1
BEGIN
UPDATE CachePolicy SET ExpirationFlags = @ExpirationFlags, CacheExpiration = @CacheExpiration
WHERE CachePolicyID = @CachePolicyID
EXEC FlushReportFromCache @Path
END
ELSE
BEGIN
DELETE FROM CachePolicy
WHERE CachePolicyID = @CachePolicyID
EXEC FlushReportFromCache @Path
END
END
GO
GRANT EXECUTE ON [dbo].[SetCacheOptions] TO [RSExecRole]
GO