假设您不需要触摸任何表(所有数据都来自函数)。请注意,SQL Server 2000中本地NVARCHAR
变量的限制是4,000个字符,因此您需要小心您的范围可能有多长。
DECLARE
@startDate SMALLDATETIME,
@endDate SMALLDATETIME;
SELECT
@startDate = '20110101',
@endDate = '20110301';
DECLARE
@i INT,
@sd SMALLDATETIME,
@sql NVARCHAR(MAX),
@column VARCHAR(32),
@columns NVARCHAR(4000);
SELECT @i = 0, @columns = N'';
WHILE @i <= DATEDIFF(MONTH, @startDate, @endDate)
BEGIN
SET @sd = DATEDIFF(DAY, 0, DATEADD(MONTH, @i, @startDate));
SET @column = DATENAME(MONTH, @sd)
+ ' ' + CONVERT(VARCHAR(20), YEAR(@sd));
SET @columns = @columns + ',' + CHAR(13) + CHAR(10)
+ ' [' + @column + ']' + ' = dbo.FunctionName(''' + @column + ''')';
SET @i = @i + 1;
END
SET @sql = 'SELECT ' + STUFF(@columns, 1, 1, '') + ';';
PRINT @sql;
--EXEC sp_executesql @sql;
在这种情况下,该收益率:
SELECT
[January 2011] = dbo.FunctionName('January 2011'),
[February 2011] = dbo.FunctionName('February 2011'),
[March 2011] = dbo.FunctionName('March 2011');
难道他们总是会在同一年和/或从1月开始,否则可能会穿越历年?提供的日期是否始终是该月的第一天,并且不包含任何时间?什么版本的SQL Server? –
什么版本的SQL Server? – JNK
日期范围可能会跨越日历年。参数是DATETIME不包含任何时间。每月的某一天可能是任何有效的一天,而不仅仅是第一天。 SQL Server 8.0.2039是SQL Server 2000 – kenalacom