SS2008在循环中选择具有增量名称的表

时间:2013-10-03 14:10:25

标签: sql sql-server-2008 loops

我正在运行SQL Server 2008.我需要查询具有增量名称的表。这些表的结构完全相同,我需要从所有表(~50)表中提取数据。表的命名约定如下:Break1,Break2,Break3等。我目前正在使用下面的查询循环数据,但问题在于生成的报告在每组数据之间留下了空隙。因此,我必须抛出Excel,删除空格并将它们全部放在一个数据集中。有没有更好的方法来获取数据,以便它没有差距?我的想法是创建一个临时表并将每个循环中的数据插入其中,但这有点过头了。任何帮助将不胜感激。

查询示例:

DECLARE @zone integer

DECLARE ZoneCursor CURSOR FOR
SELECT ZoneID 
FROM Zone 
ORDER BY  ZoneID
OPEN ZoneCursor

FETCH NEXT FROM ZoneCursor into @zone

WHILE @@FETCH_STATUS = 0
BEGIN

    EXEC(' SELECT 
    CONVERT(smallint, '''+ @zone+''')  as ZoneID')
    ...
    FROM BREAK'+ @ZONE +' B (NOLOCK) 

    FETCH NEXT FROM ZoneCursor into @zone
  END
  CLOSE ZoneCursor

结果示例:

ZoneID  Zone    NetworkID   Network Break_Date  Break_Time
------  ------- ---------   ------- --------------  --------------------------------
(0 row(s) affected)             

ZoneID  Zone    NetworkID   Network Break_Date  Break_Time
------  ------  ---------   ------- --------------  --------------------------------
2   ALPHARETTA-2538 1   CNN 4/1/2013    0:15:00
2   ALPHARETTA-2538 1   CNN 4/1/2013    0:15:00

ZoneID  Zone    NetworkID   Network Break_Date  Break_Time
------  ------- ---------   ------- --------------  --------------------------------
3   NEWTON-5491 1   CNN 4/1/2013    0:15:00
3   NEWTON-5491 1   CNN 4/1/2013    0:15:00

2 个答案:

答案 0 :(得分:0)

是在进入临时表时插入记录,然后在结尾处选择整个临时表?

首先,在光标之前,使用create table创建临时表结构。临时表以#开头,但是create语句完全相同。

然后将插入部分添加到您拥有的动态SQl(插入可以使用选择语句而不是值statemenet)。由于您现在插入的不是选择,您将不会返回任何结果。因此在光标之后,您需要从临时表中选择*。

(当然,我必须说这是一个糟糕的数据库设计。是否可以使用一个表?或者至少创建一个包含所有这些表的视图并在添加新表时调整视图?)< / p>

答案 1 :(得分:0)

有两种选择可以想到。第一个是UNION运算符,它允许您将所有内容连接到一个查询中:

SELECT ZONEID FROM BREAK1 (NOLOCK) 
UNION
SELECT ZONEID FROM BREAK2 (NOLOCK) 

第二个选项是创建一个临时表,选择该表,然后在循环结束时选择它。

DECLARE @RESULTS TABLE ( ZONEID INT )
INSERT INTO @RESULTS SELECT ZONEID FROM BREAK1
INSERT INTO @RESULTS SELECT ZONEID FROM BREAK2
SELECT ZONEID FROM @RESULTS

由于您使用EXEC语句在循环中执行此操作,因此如果使用UNION路径,则可以构建一个大的选择字符串并触发单个EXEC。如果你走第二条路线,那么在你的循环之前生成临时表,并在循环结束后选择它。

相关问题