PerfDataWithAverageReductionFromTableValuedParamGet.SP.sql (Resource)

Element properties:

TypeResource
File NamePerfDataWithAverageReductionFromTableValuedParamGet.SP.sql
AccessibilityInternal

Source Code:

<Resource ID="PerfDataWithAverageReductionFromTableValuedParamGet.SP.sql" Accessibility="Internal" FileName="PerfDataWithAverageReductionFromTableValuedParamGet.SP.sql"/>

File Content: PerfDataWithAverageReductionFromTableValuedParamGet.SP.sql

IF NOT EXISTS (SELECT * FROM sys.types WHERE name = 'Microsoft_SystemCenter_Visualization_Library_RawValuesTableType' AND schema_id = SCHEMA_ID('SDK'))

BEGIN
EXECUTE ('CREATE TYPE SDK.Microsoft_SystemCenter_Visualization_Library_RawValuesTableType AS TABLE ( DataPointTime datetime, Value float )')
END
GO

IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Microsoft_SystemCenter_Visualization_Library_PerfDataWithAverageReductionFromTableValuedParamGet' AND UID = SCHEMA_ID('SDK'))
BEGIN
EXECUTE ('CREATE PROCEDURE SDK.Microsoft_SystemCenter_Visualization_Library_PerfDataWithAverageReductionFromTableValuedParamGet AS RETURN 1')
END
GO

ALTER PROCEDURE [SDK].[Microsoft_SystemCenter_Visualization_Library_PerfDataWithAverageReductionFromTableValuedParamGet]
@StartTime datetime
,@EndTime datetime
,@NumberOfDataPoints int
,@TableValuedParam SDK.Microsoft_SystemCenter_Visualization_Library_RawValuesTableType READONLY

AS
BEGIN
SET NOCOUNT ON

DECLARE
@ErrorInd bit
,@ErrorMessage nvarchar(max)
,@ErrorNumber int
,@ErrorSeverity int
,@ErrorState int
,@ErrorLine int
,@ErrorProcedure nvarchar(256)
,@ErrorMessageText nvarchar(max)

SET @ErrorInd = 0

/* ------------------------------ */

DECLARE @Error int
DECLARE @ExecError int

BEGIN TRY

-- Create ##SubIntervalsTable to contain the startTime, endTime and the average
-- value of the sub intervals.

CREATE TABLE #SubIntervalsTable(
startTime DateTime,
endTime DateTime,
averageValue float)

DECLARE @IxSubInterval int = 0
DECLARE @IntervalLength int
DECLARE @DeltaSeconds int

SELECT @DeltaSeconds = DATEDIFF(second, @StartTime, @EndTime)

DECLARE @startSubIntervalDatetime datetime = @StartTime
DECLARE @endSubIntervalDatetime datetime
DECLARE @averageValue float

SET @IntervalLength = (@DeltaSeconds / @NumberOfDataPoints)

WHILE (@IxSubInterval < @NumberOfDataPoints)
BEGIN

SET @endSubIntervalDatetime = DATEADD(second, @IntervalLength-1, @startSubIntervalDatetime)

INSERT INTO #SubIntervalsTable VALUES (@startSubIntervalDatetime, @endSubIntervalDatetime, null)

SET @startSubIntervalDatetime = DATEADD(second, @IntervalLength, @startSubIntervalDatetime)

SET @IxSubInterval = @IxSubInterval + 1
END

SELECT S.startTime, AVG(P.Value) FROM #SubIntervalsTable S
LEFT OUTER JOIN @TableValuedParam P
ON ((P.DataPointTime >= S.startTime) AND (P.DataPointTime < S.endTime) )
GROUP BY S.startTime
ORDER BY S.startTime


END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
ROLLBACK TRAN

SELECT
@ErrorNumber = ERROR_NUMBER()
,@ErrorSeverity = ERROR_SEVERITY()
,@ErrorState = ERROR_STATE()
,@ErrorLine = ERROR_LINE()
,@ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-')
,@ErrorMessageText = ERROR_MESSAGE()

SET @ErrorInd = 1
END CATCH

-- report error if any
IF (@ErrorInd = 1)
BEGIN
DECLARE @AdjustedErrorSeverity int

SET @AdjustedErrorSeverity = CASE
WHEN @ErrorSeverity > 18 THEN 18
ELSE @ErrorSeverity
END

RAISERROR (777971002, @AdjustedErrorSeverity, 1
,@ErrorNumber
,@ErrorSeverity
,@ErrorState
,@ErrorProcedure
,@ErrorLine
,@ErrorMessageText
)
END
END
GO

GRANT EXECUTE ON [SDK].[Microsoft_SystemCenter_Visualization_Library_PerfDataWithAverageReductionFromTableValuedParamGet] TO OpsMgrReader
GRANT EXECUTE ON TYPE::[SDK].[Microsoft_SystemCenter_Visualization_Library_RawValuesTableType] TO OpsMgrReader
GO