我有一个临时表,其中包含所有可用项目
#TableA
ItemId ItemName ItemVer
1 Name1 2
2 Name2 9
3 Name3 5
.
.
.
500 Name500 3
然后我有另一个保存快照的所有日期以及 SnapshotId
CREATE TABLE #tmpSnapshot_Dates(
[SnapshotId] [uniqueidentifier] NOT NULL,
[DateTaken] datetime NOT NULL)
INSERT INTO #tmpSnapshot_Dates SELECT SnapshotId, DateTaken From Snapshot_Info Where DateTaken <= @EndDate
现在对于#tmpSnapshot_Dates
表中的每个日期,我想获得一个与每个项目相关的计数
SELECT ItemId, Count(*) From Items Where SnapshotId = @SnapshotId
然后#TableA
通过添加一列进行更新
DECLARE @ColName VARCHAR(100)
SET @ColName = 'Installed ' + CONVERT(Varchar, @DateA, 6)
exec('ALTER TABLE #TableA ADD ['+@ColName+'] int NOT NULL CONSTRAINT [DF_#TableA_Installed on] DEFAULT 0')
然后将数据插入新列。然后我需要为每个日期重复这个#tmpSnapshot_Dates
给出一个#TableA
看起来像的结果
#TableA
ItemId ItemName ItemVer Installed 01 Jan 12 Installed 07 Feb 12
1 Name1 2 34 33
2 Name2 9 56 59
3 Name3 5 12 26
.
.
.
500 Name500 3 98 106
我的问题是
- 我是否以错误的方式接近它而在这里制造了一场噩梦?
- 我如何最好地循环
#tmpSnapshot_Dates
然后获取数据以创建下一列?我总是尽量避免使用游标,但这是我需要使用的情况之一吗?
可能有 12 列要添加,并不是每个日期都会返回每个项目。