スカラー関数を使用するよりも外側の適用で自分のビューを変更します。例えば外部適用SQLで変数を設定する方法は?
:上記外側で
CREATE VIEW [bjs].[udv_SIR_SUMMARY_PERFTEST]
AS
SELECT
dimsite.[SiteCode] ,
dimsite.[SiteName] ,
....
LEFT JOIN..
OUTER APPLY
( -- convert from udf_BJs_GENERAL
SELECT
LeakCheck = CASE
WHEN (SUM(GallonsPumped)/100) + 130 > ABS(SUM(DailyVar))
THEN 'PASS'
ELSE 'FAIL'
END
FROM
[bjs].udv_DailySiraData x
WHERE
x.TankSystemId = ts.LegTankSystemId
AND Date <= MAX(x.DATE)
AND Date >= DATEADD(mm, DATEDIFF(mm,0,@ReportDate), 0)) GE
私は@ReportDate
変数を設定する必要が当てはまります。私はその変数を以下のように私の関数にセットしました。
どうすれば外側に適用することができますか?
CREATE FUNCTION [dbo].[udf_BJs_GENERAL]
(@TankSystemId INT,
@TimeStamp DATETIME2(7))
RETURNS VARCHAR(10)
AS
BEGIN
SELECT TOP 1 @TimePeriod = Date
FROM [bjs].udv_DailySiraData
WHERE TankSystemId = @TankSystemId
ORDER BY Date DESC
SET @ReportDate = @TimePeriod
IF (@TimeStamp <= @TimePeriod)
SET @ReportDate = @TimeStamp
EDIT
CREATE FUNCTION [dbo].[udf_BJs_GENERAL]
(
@TankSystemId int,
@TimeStamp datetime2(7)
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @leakChk varchar(10);
DECLARE @allowableVariance float;
DECLARE @GallonsPumped int;
DECLARE @DailyOverOrShort float;
DECLARE @TimePeriod datetime2(7);
DECLARE @ReportDate datetime2(7)
SELECT TOP 1 @TimePeriod = Date FROM [bjs].udv_DailySiraData where [email protected] ORDER BY Date DESC
SET @[email protected]
IF(@TimeStamp <= @TimePeriod)
SET @[email protected]
SELECT @GallonsPumped = SUM(GallonsPumped) FROM [bjs].[udv_DailySiraData] where [email protected] and Date <[email protected] and Date >= DATEADD(mm, DATEDIFF(mm,0,@ReportDate), 0)
SELECT @DailyOverOrShort = SUM(DailyVar) FROM [bjs].[udv_DailySiraData] where [email protected] and Date <[email protected] and Date >= DATEADD(mm, DATEDIFF(mm,0,@ReportDate), 0)
SELECT @allowableVariance= (@GallonsPumped/100) + 130
SET @leakChk='FAIL'
IF (@allowableVariance > ABS(@DailyOverOrShort))
SET @leakChk = 'PASS';
RETURN @leakChk;
END;
GO
SQL Serverでは、変数を設定して結果セットを返すことはできません。 –