私は2つのテンポラリテーブルを使用してそれぞれの値を使用してサイズの差を計算することができました。私はこれを行う最善の方法だとは言わないが、私がしたいことがうまくいくように思える。これを行う簡単な方法があるなら、私はまだそれを見るのが大好きです。
ALTER PROCEDURE [dbo].[TableGrowthReport]
@NoOWeeks int,
@TableName varchar(15)
AS
--Declares & sets variables
DECLARE @CurrentDate DATETIME
DECLARE @CalcDate DATETIME
SET @CurrentDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
SET @CalcDate = DATEADD(ww, @NoOWeeks, @CurrentDate)
CREATE TABLE #Data
(
RowNo int,
EXTRACT_DATE varchar(19),
TABLE_NAME varchar(128),
NUMBER_ROWS bigint,
DATA_SIZE bigint,
DATA_SIZE2 bigint,
);
CREATE TABLE #Data2
(
RowNo int,
DATA_SIZE2 bigint
);
INSERT INTO #Data
(RowNo,
EXTRACT_DATE,
TABLE_NAME,
NUMBER_ROWS,
DATA_SIZE,
DATA_SIZE2)
SELECT
ROW_NUMBER() OVER (ORDER BY EXTRACT_DATE desc) as RowNo,
EXTRACT_DATE,
TABLE_NAME,
NUMBER_ROWS,
DATA_SIZE,
NULL
FROM M3Rows_PF
WHERE TABLE_NAME = @TableName
AND EXTRACT_DATE >
(SELECT CONVERT(varchar(10), @CalcDate, 20));
INSERT INTO #Data2
(RowNo,
DATA_SIZE2)
SELECT
RowNo,
DATA_SIZE
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY EXTRACT_DATE desc) - 1 as RowNo,
EXTRACT_DATE,
TABLE_NAME,
NUMBER_ROWS,
DATA_SIZE
FROM M3Rows_PF
WHERE TABLE_NAME = @TableName
AND EXTRACT_DATE >
(SELECT CONVERT(varchar(10), @CalcDate, 20))
)r
WHERE rowno > 0;
UPDATE a
SET DATA_SIZE2 = b.DATA_SIZE2
FROM #Data a
JOIN #Data2 b ON a.RowNo = b.RowNo
WHERE a.RowNo = b.RowNo
SELECT
RowNo,
EXTRACT_DATE,
TABLE_NAME,
NUMBER_ROWS,
DATA_SIZE,
DATA_SIZE2,
CASE
WHEN DATA_SIZE > 0 AND DATA_SIZE < 10000000
THEN LEFT(DATA_SIZE * 1.0/10000, 4) + 'kb'
WHEN DATA_SIZE >= 10000000 AND DATA_SIZE < 1000000000
THEN LEFT(DATA_SIZE * 1.0/1000000, 5) + 'mb'
ELSE
LEFT(DATA_SIZE * 1.0/1000000000, 5) + 'gb' END AS DATA_SIZECONV,
DATA_SIZE - DATA_SIZE2 AS SIZE_DIFF,
LEFT((DATA_SIZE - DATA_SIZE2) * 1.0/1000000, 5) AS SIZE_DIFFmb
FROM #data
WHERE TABLE_NAME = @TableName
AND EXTRACT_DATE >
(SELECT
CONVERT(varchar(10), @CalcDate, 20)
)
DROP TABLE #Data
DROP TABLE #Data2
編集サンプルデータ、予想される出力と何をしようとしているが含まれるように、あなたの質問は、これまで – JohnHC
また、あなたのデータベースのアップグレードを検討する必要があります。 2005年はMicrosoftによってサポートされなくなりました。 –
残念ながら、それ以外のバージョンを使用するには、私は間違いなく後のバージョンを使用しています。 –