【发布时间】:2016-02-29 10:49:40
【问题描述】:
以下代码从 11 个表中返回数据。每个表都包含年份和月份。我需要使用 enddate 参数来检查只有表 todate 被拉出。因此,如果用户想要来自 201505 的数据,它应该 假设我们在 201510 月份,从 201510 开始,仅在 201509 之前提取所有表格。代码如下:
{
declare
@enddate varchar(6),
@FirstTableMonth int =201505,
@Table_Name sysname,
@TableMonth int,
@end int,
@CurrentMonth int = 0,
@NextYearMonth int = 1
set @enddate = 201611
WHILE @CurrentMonth < 11
BEGIN
SELECT @TableMonth = CASE WHEN (@FirstTableMonth + @CurrentMonth) % 100 < 13 THEN
@FirstTableMonth + @CurrentMonth
ELSE
@FirstTableMonth + 100 - (@FirstTableMonth % 100) + @NextYearMonth
END,
@NextYearMonth = CASE WHEN (@FirstTableMonth + @CurrentMonth) % 100 < 13 THEN
@NextYearMonth
ELSE
@NextYearMonth + 1
END,
@end = case when @enddate
@Table_Name = 'xx_'+CAST(@TableMonth as varchar)+'_T'
SET @CurrentMonth = @CurrentMonth + 1
print @Table_Name;
END
}
【问题讨论】:
-
请标记使用的 dbms。 (看起来不像 ANSI SQL。)
-
为什么同一种数据有不同的表?那看起来很可怕。应该只有一张桌子。如果可能,请更改此设置。然后检索数据将非常简单。
-
我没有创建数据结构
-
但是你可以改变它吗?还是有人改?这看起来更像是与 DBMS 对抗,而不是简单地使用它。
-
您正在使用多个名称包含日期的表。这是一种非常不正统的做法,令人不悦。它被不了解关系数据库的绝望的 n00bs 或试图绕过软件中的硬件限制而不是购买更好的硬件的绝望的人使用。
标签: sql sql-server-2008